C# 更改组合框应更新实体EF6

C# 更改组合框应更新实体EF6,c#,linq,entity-framework,combobox,windows-forms-designer,C#,Linq,Entity Framework,Combobox,Windows Forms Designer,所以基本上,我有一个实体,我使用LINQ查询来获取一些项,并将其绑定到一个组合框 我试图做的是在组合框中的项目发生更改时更新实体,而不在组合框中进行手动更新。SelectedIndex/SelectedValue changed事件。我只是想知道有没有更好的办法 伪代码: SomeEntity se = new SomeEntity(); var q = from x in se select x; cbComboBox.Datasource = q.ToList(); cbComboBox.

所以基本上,我有一个实体,我使用LINQ查询来获取一些项,并将其绑定到一个组合框

我试图做的是在组合框中的项目发生更改时更新实体,而不在组合框中进行手动更新。SelectedIndex/SelectedValue changed事件。我只是想知道有没有更好的办法

伪代码:

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}"/>

通过这种方式,您可以在viewmodel类中拥有实体列表(SomeList)和相同类型的对象(CurrentItem),每当用户更改组合框中的选定项时,这些对象都会更新。如果不需要整个对象,可以将选定的值绑定到viewmodel上显示的属性,该属性与id的时间相同


希望这有帮助。

是的,windows窗体。对不起,我应该提一下。感谢您的回复。如果您认为有答案解决了问题,请单击绿色复选标记将其标记为“已接受”。