【发布时间】:2020-07-31 18:56:11
【问题描述】:
各位程序员!
我有一个应用,其中 ComboBox 绑定到 EF Core 实体列表。 我发现当我将它绑定到 SelectedItem 时,它不会在断开连接的情况下返回正确的项目。但是,当同时使用 SelectedValue 和 SelectedItem 时,它似乎工作正常。这是一个好方法吗?父对象同时拥有“int Id”和导航属性。所以 SelectedItem 绑定到 Navigation Property,SelectedValue 绑定到“int Id”。
C#:
public Person()
{
int Id {get; set;}
string Name {get; set;}
}
XAML:
<ComboBox
DisplayMemberPath="Name"
SelectedValuePath="Id"
ItemsSource="{Binding People}"
SelectedValue="{Binding SelectedPerson, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding SelectedPersonNavigation", UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" />
【问题讨论】:
-
你没有说清楚你的意思是什么它不会返回正确的项目。但是请看一下
SelectedItem和SelectedValue之间的区别。你不需要在推测中同时使用这两个,一般来说,如果你使用SelectedValue,你通常也需要使用SelectedValuePath。 stackoverflow.com/questions/4902039/… -
请注意,对于这两个属性,在 Binding 上设置
UpdateSourceTrigger=PropertyChanged是没有意义的,因为这已经是默认设置。对于 OneWay 绑定,无论如何它没有意义,因为 UpdateSourceTrigger 仅在 TwoWay 或 OneWayToSource 绑定中有效。 -
抱歉,我会更准确地说:我正在从数据库加载父实体,也是人员列表。我试图实现的是当我加载这些对象时,我希望 Combobox 显示来自父实体的选定人员。另一个想法是在调用 SaveChanges 并仅更改 SelectedValue 时,我以不同的 Id 和 Navigation Property 结尾。我想我可以通过在 SaveChanges 调用之前调用 Navigation Property = null 并仅使用 SelectedValue 来实现相同的目的
-
请编辑原帖并显示上述代码。
标签: c# wpf xaml ef-core-3.1