ListBox绑定到类的Dictionary,显示键并选择类对象,而不是xaml中的KeyValuePair



我有一个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">

我正在寻找:

  1. 显示已实现的密钥
  2. 返回所选类型为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">

相关内容

  • 没有找到相关文章

最新更新