所以,基本上,我有一个实体,我使用LINQ查询来获取一些项,并将其绑定到一个组合框。
当组合框中的项目发生更改时,我要做的是让实体更新,而不在组合框中手动更新。SelectedIndex/SelectedValue更改事件。我只是想知道是否有更好的方法?
伪代码:
SomeEntity se = new SomeEntity();
var q = from x in se select x;
cbComboBox.Datasource = q.ToList();
cbComboBox.DisplayMember = "SomeValue";
cbComboBox.ValueMember = "SomeValueID";
cbComboBox.SelectedValue = se.SomeValueID;
所以组合框显示了我想要的正确值。没关系。
事情是这样的,当用户更改组合框时,我希望se.SomeValueID能够反映这种更改。
我知道我可以在组合框SelectedValue事件中设置se.SomeValueID,但有更好的方法吗?se.SomeValueID在哪里自动更新?
假设您的问题是关于Windows窗体的。要将SelectedValue
绑定到对象的属性,可以添加自定义绑定:
cbComboBox.DataBindings.Add("SelectedValue", se, "SomeValueID");
该绑定是双向的,在cbComboBox.SelectedValue = se.SomeValueID;
行中不需要。
您应该使用XAML中定义的绑定而不是C#代码隐藏代码来实现这一点,下面是一个示例:
<ComboBox ItemsSource="{Binding SomeList}"
DisplayMemberPath="SomeField"
SelectedItem="{Binding CurrentItem, Mode=TwoWay}"/>
通过这种方式,您可以在视图模型类中拥有实体列表(SomeList)和相同类型的对象(CurrentItem),每当用户在组合框中更改所选项目时,它们都会更新。如果你不需要整个对象,你可以将所选的值绑定到你的视图模型上显示的一个属性,该属性与id的时间相同。
希望这能有所帮助。