在我的ViewModel中,我有一个可观察字符串集合的字典,声明如下。
public Dictionary<string, ObservableCollection<string>> NamePartsDict { get; set; }
我想在我的用户界面中将Dictionary绑定到ComboBoxes,这样每个ComboBox都可以“选择”要绑定的集合。
所以在我的XAML中,我想使用:
<ComboBox x:Name="comboBox" IsEditable="True"
ItemsSource="{Binding CurrentLibrary.NamePartsDict[Year]}" Margin="80,0,0.871,0"></ComboBox>
我希望绑定到由Key“Year”索引的Collection,并使用存储在集合中的字符串填充ComboBox。
但是,这个XAML导致一个空的ComboBox。
我已经确认字典本身可以绑定。下面的XAML使用每个Key,Value对的字符串表示填充ComboBox。
<ComboBox x:Name="comboBox" IsEditable="True"
ItemsSource="{Binding CurrentLibrary.NamePartsDict}" Margin="80,0,0.871,0"></ComboBox>
从字典中获取值时,绑定路径中的某些内容是错误的吗?或者我正在尝试做一些不可能的事情(在这种情况下,我将不得不寻找另一种方式!)?
非常感谢任何帮助!
添
答案 0 :(得分:0)
您应该在此处使用Datatemplate 喜欢在这里: http://www.codeproject.com/Articles/47923/Using-a-different-DataTemple-when-a-WPF-ComboBox-i
答案 1 :(得分:0)
我使用转换器解决了这个问题:
/// <summary>
/// Returns a
/// </summary>
public class DomainValueConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
ObservableCollection<DomainValue> retVal = null;
DomainDefinitionCollection dds = value as DomainDefinitionCollection;
if (dds != null)
{
retVal = dds[parameter.ToString()];
}
return retVal;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
<controls:ComboBox VerticalAlignment="Center"
DisplayMemberPath="Name"
SelectedValuePath="Value"
SelectedValue="{Binding ChildClientEntity.EditableEntity.EditableAttributes.TeamPosition, Mode=TwoWay}"
ItemsSource="{Binding ChildClientEntity.Domains, Converter={StaticResource DomainValueConverter}, ConverterParameter=SiteVisitTeamPosition}" />
其中ConverterParameter是字典的关键字域。
public Dictionary<string, ObservableCollection<DomainValue>> Domains { get; private set; }