2014-11-24 2 views
0

Я пытаюсь связать свойство зависимости на элементе управления, который наследует от MenuItem свойство зависимости моего окна. Я поставил точки останова на get и наборы обоих свойств, и я никогда не вижу, чтобы свойство get вызываемого окна. Свойство window - это источник, а свойство управления - цель.Свойство привязки свойств объекта 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 для себя, а также для FindAncestor с AncestoryType set к окну.

ответ

1

С обязательным условием связывания get/set никогда не будет вызываться, поскольку привязка разрешается с использованием инфраструктуры свойств зависимостей. Как вы можете видеть все ваше имущество делает это позволит вам легкий доступ к значению этого свойства зависимостей путем вызова

GetValue(StorageProperty) 

Вместо использования свойства привязки двигатель просто вызывает, что непосредственно

редактировать: Есть ли окно есть MRUStorage как собственность? Вам понадобится это, чтобы иметь возможность использовать его как путь привязки

+0

Я вижу, что вы имеете в виду, когда используется метод GetValue, а не свойство. Проблема все еще существует там, где свойство не отображается, потому что, когда я вызываю GetValue, он возвращает Nothing. Да, у меня есть свойство в окне, я забыл включить его в свой первоначальный вопрос. Я добавлю это сейчас. – Lance

+0

Я не уверен в этом вопросе, привязка неверна, если вы правильно не установили datacontext windows. Вам понадобится RelativeSource = {RelativeSource AncestorType = {x: Type Window}}, но вы сказали, что уже пытались это сделать. – ndonohoe

+0

Я думаю, вы только что исправили это. Моя предыдущая попытка RelativeSource была: RelativeSource = {RelativeSource AncestorType = Window} Добавление окна {X: Type}, похоже, устранило проблему. – Lance

Смежные вопросы