我有一个ListBox
,我正在绑定到xaml中的MyDictionary<string, MyClass>
(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-中绑定到字典中的类属性
由于存在SelectedValuePath,请绑定SelectedValue而不是SelectedItem。则无需处理选择事件(删除SelectionChanged处理程序方法(
<ListBox x:Name="MyListBox"
SelectedIndex="0"
DataContext="{Binding ElementName=thiswindow}"
SelectedValue="{Binding SelectedMyClass}"
ItemsSource="{Binding Path=MyDictionary}"
SelectedValuePath="Value"
DisplayMemberPath="Key">