我有两个ComboBox
。第一个源是 a 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”,但该密钥的值为空,此时应为“3”。
正如下面@mm8 所说,当像这样绑定文本块时:Text="{Binding SelectedItem.Key, ElementName=ModelList}"
“MessageID”出现在文本块中。所以使用 绑定是正确的SelectedItem.Value
,但值设置不正确。
尝试绑定到 的Value
属性的SelectedItem
属性ComboBox
:
<TextBlock Text="{Binding SelectedItem.Value, ElementName=ModelList}" />
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句