我想将字典绑定到组合框 我的代码就是这个(这里我简化了一点)
public class MyObject
{
private AnotherObject _obj;
public MyObject() { }
public MyObject(AnotherObject obj)
{
_obj = obj;
}
public string ObjType
{
get { return (_obj != null ? _obj.GetType() : "NO OBJECT" ); }
}
public string ObjString
{
get { return (_obj != null ? _obj.ToString() : "NO OBJECT" ); }
}
}
public class MyClass
{
private Dictionary<string, MyObject> _BindingButtons;
public MyClass()
{
_BindingButtons["KEY_1"] = new MyObject( CreateAnotherObject() );
_BindingButtons["KEY_2"] = new MyObject( CreateAnotherObject() );
...
...
}
public Dictionary<string, MyObject> BindingButtons
{
get { return _BindingButtons; }
}
}
现在,在我写的xaml中
<ComboBox ItemsSource="{Binding BindingButtons}"
DisplayMemberPath="ObjString"
SelectedValuePath="KEY_1"
SelectedValue="{Binding ???? }"/>
我有两个问题
哪里错了?
问候。
[编辑]
关于我在SelectedValue上的问题...
假设有10个具有相同ItemsSource的组合。现在,不是写10个属性(每个组合一个),有没有办法写这样的东西(处理SelectedItem):
class Test
{
private string[] _Items = new string[10];
public string GetItem(int index)
{
return _Items[index];
}
public void SetItem(int index, string value)
{
_Items[index] = value;
}
}
答案 0 :(得分:0)
Dictionary有一个集合属性Values
,您可以在这里使用
根据您的数据模型,这应该可行
<ComboBox ItemsSource="{Binding BindingButtons.Values}"
DisplayMemberPath="ObjString"
SelectedItem="{Binding SelectedItemInVM}"/>
我在你的问题中不确定SelectedValue的用途,我在例子中用SelectedItem替换它,你可以根据你的需要进行调整。
修改强>
回答你的编辑
您有两个选项可以将单个组合框绑定到数组
但在此之前你需要将数组字段转换为公共属性并相应地初始化,否则绑定可能会失败
public string[] Items { get; set; }
然后使用索引器Items[0]
等进行绑定。
<ComboBox ItemsSource="{Binding BindingButtons.Values}"
DisplayMemberPath="ObjString"
SelectedValuePath="ObjType"
SelectedValue="{Binding Items[0]}"/>
或创建MyObject
类型
public MyObject[] Items { get; set; }
并且绑定保持相同,但使用SelectedItem
属性而不是SelectedValue
<ComboBox ItemsSource="{Binding BindingButtons.Values}"
DisplayMemberPath="ObjString"
SelectedItem="{Binding Items[0]}"/>
确保在构造函数Items = new string[10];
或Items = new MyObject[10];
中初始化数组10是您拥有的组合数