WPF绑定到<type,object>的Object.Property的字典

时间:2018-07-09 13:50:18

标签: c# wpf data-binding

我想要一个组合框的源绑定到特定键的Oject.Name字段。 我能找到的唯一示例是“字符串字典”。

这是我尝试过的:

    public class XMLTypeData
{
    public string Abbreviation;
    public string Name;
    public string Value;
    public Dictionary<string, XMLTypeData> Children = new Dictionary<string, XMLTypeData>();
}

我之前已将值加载到字典中

Dictionary<Type, List<XMLTypeData>> XML = new Dictionary<Type, List<XMLTypeData>>();

我不确定这是否可能

 <ComboBox x:Name="CBType" DisplayMemberPath="Key" SelectedValuePath="Value.Name" ItemsSource="{Binding XML}"  Text="{Binding Source={StaticResource UserControlBindings},Path=SelectedTreeEntity.Type/>

1 个答案:

答案 0 :(得分:1)

感谢Fabulous,我得以实现这一目标。问题是我做了一个字典的清单。我将字典更改如下:

Dictionary<Type, XMLTypeData> XML = new Dictionary<Type, XMLTypeData>();

然后我将XAML中的DisplayMemberPath和SelectedValuePath属性更改如下:

<ComboBox x:Name="CBType" DisplayMemberPath="Key" SelectedValuePath="Value" ItemsSource="{Binding XML}"  Text="{Binding Source={StaticResource UserControlBindings},Path=SelectedTreeEntity.Type/>

还要注意,我将组合框的itemsource设置为层次结构的相关子字典:

CBType.ItemsSource = ElementaryTypes[SelectedType].Children;

并设置另一个组合框,该组合框取决于层次结构的上级:

private void CBType_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if(CBType.SelectedItem is KeyValuePair<string,XMLTypeData> KeyPair)
            {
             if (ElementaryTypes[SelectedType].Children.Keys.Contains(KeyPair.Key))
                 {
                CBSubType.ItemsSource = ElementaryTypes[SelectedType].Children[KeyPair.Key].Children;
                 }
            }
    }