2014-11-24 60 views
0

我正試圖綁定從MenuItem繼承到我的窗口的依賴項屬性的控件上的依賴項屬性。我已經在這兩個屬性的get和sets上設置了斷點,並且我從不會看到被調用的窗口的屬性。窗口屬性是源,控件屬性是目標。未訪問WPF屬性綁定源屬性

控件的屬性如下:

Public Shared StorageProperty As DependencyProperty = 
           DependencyProperty.Register("Storage", 
                  GetType(IStorage), 
                  GetType(MRUFileList), 
                  New PropertyMetadata(Nothing)) 

Public Property Storage As IStorage 
    Get 
     Return DirectCast(GetValue(StorageProperty), IStorage) 
    End Get 
    Set(value As IStorage) 
     SetValue(StorageProperty, value) 
    End Set 
End Property 

和窗口的屬性是:

Public Shared ReadOnly MRUStorageProperty As DependencyProperty = 
              DependencyProperty.Register("MRUStorage", 
                     GetType(MRU.IStorage), 
                     GetType(GrammarEditor), 
                     New PropertyMetadata(Nothing)) 

Public Property MRUStorage As MRU.IStorage 
    Get 
     Return DirectCast(GetValue(MRUStorageProperty), MRU.IStorage) 
    End Get 
    Set(value As MRU.IStorage) 
     SetValue(MRUStorageProperty, value) 
    End Set 
End Property 

最後,在XAML定義綁定是:

<mru:MRUFileList Name="mnuRecent" 
       Header="Open _Recent" 
       Storage="{Binding MRUStorage, 
          Mode=TwoWay, 
          UpdateSourceTrigger=PropertyChanged}" /> 

以前,我嘗試將RelativeSource設置爲Self,並將AncestoryType設置爲FindAncestor到窗口。

回答

1

使用依賴屬性綁定get/set永遠不會被調用,因爲使用依賴項屬性基礎結構解決了綁定。正如你可以看到你所有的財產不就是讓你通過調用

GetValue(StorageProperty) 

而不是使用你的財產綁定引擎只是調用直接

編輯方便地訪問依賴屬性的值:你的窗口有MRUStorage作爲一種財產?您將需要那能夠使用它作爲綁定路徑

+0

我明白你的意思是關於正在使用的GetValue方法,而不是屬性。該問題仍然存在,因爲當我調用GetValue時,該屬性看起來沒有被設置,所以它返回Nothing。 是的,我確實有一個窗口中的屬性,我忘了把它包含在我原來的問題中。我現在就添加它。 – Lance 2014-11-24 14:18:29

+0

我不確定這個問題,那麼綁定是不正確的,除非你已經正確設置了windows datacontext。你需要RelativeSource = {RelativeSource AncestorType = {x:Type Window}},但你說你已經試過了。 – ndonohoe 2014-11-24 14:28:36

+0

我認爲你只是修復它。我之前在RelativeSource的嘗試是:RelativeSource = {RelativeSource AncestorType = Window}添加{X:Type Window}似乎已解決了這個問題。 – Lance 2014-11-24 14:32:46