2010-01-18 54 views
0

我正在使用類似於visio的WPF應用程序。我希望能夠對我圖中的一些項目進行邏輯分組,其中每個項目都是UIElement,並控制組級別的某些行爲(即可見性)。WPF綁定到另一個對象的DependencyProperty?

我第一次嘗試創建一個名爲Group的控件,它的寬度爲& height = 0我想通過它的group屬性爲我的圖元指定一個特定的「Group」,然後綁定某個UIElement屬性值如下:

<DiagramNode 
     Width="300" Height="300" 
     Visibility="{Binding RelativeSource={RelativeSource Self},Path=Group.Visibility}" 
     > ... </DiagramNode > 

儘管這不會引發綁定錯誤,但它也不起作用。更改組的可見性對分配給該組的節點的可見性沒有影響。據我所知,任何時候都不會出現任何錯誤,但它不起作用。

任何想法?我的方法可行嗎?如果不是,任何人都有他們想要的建議:)。我不是一個大UI用戶,在服務層感覺更舒適,所以我願意接受其他建議。

回答

0

如果真的有在當通過調試器中運行的應用程序的痕跡沒有綁定錯誤,那麼問題可能是在變化的通知。您必須確保Group對象的Visibility屬性在更改時提供更改通知。

這通常是通過在類上實現INotifyPropertyChanged並在set訪問器中引發一個PropertyChanged事件(如果該值實際發生更改)來完成的。

+0

感謝您的答覆阿維亞德。 我相信我的Group對象爲Visibility屬性實現了INotifyPropertyChanged,因爲我的Group對象從UserControl繼承。你會同意嗎? – Frank 2010-01-18 20:15:37

+0

它是否也實際引發'Visibility'屬性設置器中的'PropertyChanged'事件?這必須明確地完成。 – 2010-01-18 20:19:07

+0

UserControl不*執行INotifyPropertyChanged。但是,如果Group是UserControl,則Group.Visibility是一個依賴項屬性,因此不需要將更改通知提升爲綁定源。您可能想要發佈更多的組定義來幫助診斷問題。 – itowlson 2010-01-18 21:04:52

0

問題可能出在我的DiagramNode類的Group對象的屬性聲明中?

Public Class DiagramNode 
... 
Private _group As Group 
Public Property Group() As Group 
    Get 
     Return Me._group 
    End Get 
    Set(ByVal value As Group) 
     Me._group = value 
    End Set 
End Property 
... 
End Class 
相關問題