更改组合框应更新实体 EF6
Changing Combobox should update entity EF6
所以基本上,我有一个实体,我使用 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}"/>
通过这种方式,您可以在 viewmodel class 中包含实体列表 (SomeList) 和同一类型的对象 (CurrentItem),每次用户更改组合框。如果您不需要整个对象,您可以将所选值绑定到一个 属性 暴露在您的视图模型上,同时使用 id。
希望对您有所帮助。
所以基本上,我有一个实体,我使用 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}"/>
通过这种方式,您可以在 viewmodel class 中包含实体列表 (SomeList) 和同一类型的对象 (CurrentItem),每次用户更改组合框。如果您不需要整个对象,您可以将所选值绑定到一个 属性 暴露在您的视图模型上,同时使用 id。
希望对您有所帮助。