У меня есть ListBox
, к которому я привязываюсь MyDictionary<string, MyClass>
в xaml (DataContext
правильно установлено):
<ListBox x:Name="MyListBox"
SelectedIndex="0"
DataContext="{Binding ElementName=thiswindow}"
SelectedItem="{Binding SelectedMyClass}"
ItemsSource="{Binding Path=MyDictionary}"
SelectedValuePath="Value"
SelectionChanged="MyListBox_SelectionChanged"
DisplayMemberPath="Key">
Я ищу:
- Показать ключ, уже достигнутый.
- Вернуть выбранный элемент типа
MyClass
.
Поскольку MyDictionary.Value
имеет тип MyClass
Я сделал SelectedValuePath="Value"
, но кажется, что возвращенный выбранный объект имеет тип KeyValuePair<string, MyClass>
в соответствии с полученной ошибкой:
Cannot convert '[Test, MyClass]' from type 'KeyValuePair`2' to type 'MyClass' for 'en-US' culture with default
conversions; consider using Converter property of Binding.
Единственное решение, которое я нашел, это использование SelectionChanged
события:
private void MyListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var tmp = (KeyValuePair<string, MyClass>)MyListBox.SelectedItem;
SelectedMyClass= MyDictionary[tmp.Key];
}
Я уверен, что есть способ добиться этого только в xaml или, по крайней мере, более чистым способом, при этом продолжая использовать класс Dictionary
.
Может быть, с помощью дополнительного использования конвертера? чего мне не хватает?
Связанный вопрос: Привязка к свойству класса в словаре в wpf