У меня есть класс, который содержит открытое свойство MyDictionary :
Public MustInherit Class MyBaseClass
Public Shared ReadOnly Property MyDictionary As Dictionary(Of Integer, String)
Get
Return New Dictionary(Of Integer, String) From {
{0, "Option 1"},
{1, "Option 2"}
}
End Get
End Property
End Class
Этот класс является базовым классом для нескольких дочерних классов, например, ClassA и ClassB .Свойство MyDictionary () , как и ожидалось, наследуется дочерними классами, но обратите внимание, что оно статическое.
Также у меня есть разметка XAML, как и далее, и DataContext элемента управления является экземпляром одного изклассы детей:
<Window>
<Grid DataContext="{Binding ClassA}">
<ComboBox ItemsSource="{Binding MyDictionary.Values}" />
</Grid>
</Window>
Проблема заключается в том, что во время выполнения окно содержит пустой ComboBox.Описание ошибки:
Ошибка System.Windows.Data: 39: Ошибка пути BindingExpression: свойство «MyDictionary» не найдено в «объекте», «ClassA» (HashCode = 9490272) '.BindingExpression: Path = MyDictionary.Values;DataItem = 'ClassA' (HashCode = 9490272);целевой элемент - ComboBox (Name = '');Свойство target - «ItemsSource» (тип «IEnumerable»)
Если я явно переопределить MyDictionary () свойство в ClassA , проблема исчезнет, и ComboBoxЭлемент управления содержит элементы «Вариант 1» и «Вариант 2».
Два вопроса.
- Зачем мне нужно создавать свойства в каждом дочернем классе для использования его в качестве источника элементов управления?Почему XAML не может использовать свойства базового класса?Ценность наследства теряется в противном случае.
- Есть ли способ использовать свойство базового класса в качестве источника предметов?