如何使用嵌套字典作为源将文本块绑定到组合框

时间:2017-04-26 13:32:20

标签: c# wpf dictionary data-binding combobox

我有两个ComboBox。第一个来源是dictionary,字符串作为键,对象作为值。选择项目后,第二个ComboBox将使用所选项目的单独dictionary中的键填充。当选择第二个ComboBox中的项目时,TextBlock应显示在第二个ComboBox中选择的密钥的值。但是,文本块始终显示为空。我已经确定该值确实包含实际数据,这让我相信这是一个具有约束力的问题。

以下是我的ViewModel的相关部分:

GPHDTModel gphdtModel = new GPHDTModel();

private Dictionary<string, object> models = new Dictionary<string, object>();
public Dictionary<string, object> Models
{
    get
    {
        return models;
    }
}

public MainWindowViewModel()
{
    gphdtModel.MessageID = "3";
    models.Add("GPHDT", gphdtModel);
}

接下来是GPHDTModel:

private Dictionary<string, string> _fields = new Dictionary<string, string>();
public Dictionary<string, string> Fields
{
    get
    {
        return _fields;
    }
}

public GPHDTModel()
{
    _fields.Add("MessageID", MessageID);
}

private string _messageID;
public string MessageID
{
    get { return _messageID; }
    set { _messageID = value; OnPropertyChanged("MessageID"); }
}

最后的观点:

<ItemsControl ItemsSource="{Binding DataModelCollection}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <ComboBox x:Name="NMEAlist"
                          DisplayMemberPath="Key"
                          ItemsSource="{Binding Path=DataContext.Models,
                                                RelativeSource={RelativeSource Mode=FindAncestor,
                                                                               AncestorType={x:Type ItemsControl}}}"
                          SelectedValuePath="Value" />
                <ComboBox x:Name="ModelList"
                          DisplayMemberPath="Key"
                          ItemsSource="{Binding SelectedItem.Value.Fields,
                                                ElementName=NMEAlist}"
                          SelectedValuePath="Value" />
                <TextBlock Text="{Binding Value,
                                          ElementName=ModelList}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

编辑:在TextBlock调试的绑定中使用转换器,它显示正确的密钥,在本例中为“MessageID”,但密钥的值为null,当它应为“3”时”

正如@ mm8所述,当绑定文本块时,如下所示:Text="{Binding SelectedItem.Key, ElementName=ModelList}"“MessageID”出现在文本块中。所以使用SelectedItem.Value绑定是正确的,但是没有正确设置值。

1 个答案:

答案 0 :(得分:1)

尝试绑定Value的{​​{1}}属性的SelectedItem属性:

ComboBox