如果附屬屬性發生變化,是否可以通知「父母」?如果附加屬性發生變化,是否可以通知「父母」?
我很困擾WPF問題。我有一個類「ContainerVisual」(實際上是一個visual3D,但應該是無關緊要的),它定義了一個附屬屬性「IsChildVisible」。在XAML中,我使用這個視覺效果,並添加了一些孩子。每個孩子使用附加屬性,並將其值綁定到視圖模型中的屬性。當視圖模型中的屬性從true變爲false時,孩子應該消失,如果變回true,孩子應該重新出現。
爲了使這成爲可能,我在ContainerVisual中處理這個問題的邏輯。然後我聽到依賴項屬性發生更改事件,如下所示:
public static readonly DependencyProperty IsChildVisibleProperty =
DependencyProperty.RegisterAttached("IsChildVisible", typeof(bool),
typeof(ContainerVisual), new UIPropertyMetadata(true, IsChildVisiblePropertyChanged));
private static void IsChildVisiblePropertyChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e) {}
到目前爲止這麼好。我的問題是,發件人,事件附帶的DependencyObject是孩子,而不是父母。通常這不是一個大問題,因爲您可以使用樹幫助器類來獲取父級,但這需要首先在視覺/邏輯樹中顯示視覺。如果該值從false更改爲true,則需要通知「父級」將對象放回樹中。當然這個對象在這一點上沒有父級,所以要找到它會很難......
所以我的問題是這樣的: 是否有可能在定義類的實例中獲得通知附加屬性(在我的情況下,ContainerVisual類的實例),如果一個對象使用附加屬性(子)更改屬性的值?
如果這是不可能的,有沒有辦法讓我隱藏一個視覺小孩而不從視覺和/或邏輯樹中移除它?
編輯: 如果有幫助,我已經存儲了所有潛在的孩子的參考。我只需要調用一個參數 - 少public方法在我ContainerVisual實例...
爲什麼父母首先處理可見性?你爲什麼不簡單地將兒童的可見性屬性綁定到VM屬性? –
Visual3D(或實際上ModelVisual3D)沒有Visibility屬性。這就是我想要創造的。據我所知,只要是在視覺樹中,孩子們都是可見的。因此,我的解決方案是根據我在視圖模型中指定的條件從樹中添加或刪除它們。 – Sverre