我有两个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
绑定是正确的,但是没有正确设置值。
答案 0 :(得分:1)
尝试绑定Value
的{{1}}属性的SelectedItem
属性:
ComboBox