簡體   English   中英

Xceed PropertyGrid 中的條件隱藏/顯示

[英]Conditional Hide/Show in Xceed PropertyGrid

我正在為我的 WPF 應用程序使用 Xceed 屬性網格。 我有一種情況,屬性字段根據選擇使其他屬性過時。 然而,我目前唯一能做的就是顯示所有內容,讓用戶弄清楚應該填寫什么,不應該填寫什么。

下面是一個很好的例子。 [記錄匹配類型] 字段有兩個選項。 第一個選項 (UniqueId) 應該只顯示 [Unique ID Column Name]。 其余的應該隱藏。 如何才能做到這一點?

例子

這個答案很晚; 但是,我使用 Xceed 屬性網格並實現了您所描述的內容。

首先,如果您不想在視圖模型中顯示某個屬性,只需在該屬性上方添加 [Browsable(false)] 屬性即可。

現在,如果您希望能夠根據對另一個屬性的選擇來顯示/隱藏屬性,您可以執行以下操作。

  1. 將此事件添加到您的視圖模型。 public event Action<string, bool> ChangeVisible;

  2. 每當您想要顯示或隱藏屬性時,您都會引發此事件。 即您有一個“Age”屬性,如果 Age 小於 16,您想隱藏“Employer”屬性。在“Age”屬性設置器中,您將檢查值if (value) < 16 ,然后引發事件ChangeVisible?.Invoke("Employer", false); 要顯示它而不是隱藏它,您將傳遞 'true' 而不是 'false'。

  3. 為此,您還必須在承載視圖模型的視圖上添加一個偵聽器。 在視圖的構造函數中(我們稱之為“MyView.xaml.cs”),您將在 DataContext(您的視圖模型)上注冊一個偵聽器。 MyViewModel.ChangeVisible += MyViewModel_ChangeVisible;

  4. 在偵聽器中,您將直接調用 PropertyGrid 的“ShowProperty”方法。 假設您的 PropertyGrid 的名稱為“MyPropertyGrid”。 您的聽眾將如下所示。

     /// <summary> /// Hide/show a preference /// </summary> /// <param name="property">name of the preference</param> /// <param name="show">make it visible or hide it?</param> private void MyViewModel_ChangeVisible(string property, bool show) { Dispatcher.Invoke(() => MyPropertyGrid.ShowProperty(property, show)); }
  5. 最后但同樣重要的是,PropertyGrid 沒有 ShowProperty 方法。 因此,您將創建一個帶有公共靜態擴展方法的靜態類,這樣您就可以使所有這些神奇的工作發揮作用。

     public static void ShowProperty(this PropertyGrid pg, string property, bool show) { for (int i = 0; i < pg.Properties.Count; ++i) { PropertyItem prop = pg.Properties[i] as PropertyItem; if (prop.PropertyName == property) { prop.Visibility = show ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed; break; } } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM