【发布时间】:2015-04-19 19:25:18
【问题描述】:
我有一个组合框,其项目来源类型为 ObservableCollection<Clinic>
<ComboBox ItemsSource="{Binding Source={StaticResource ClinicList}}" DisplayMemberPath="Name" SelectedValue="{Binding Path=Name}" SelectedValuePath="Name"></ComboBox>
此组合框位于从 EmployeeClinics 绑定的 ListView 中。
public class Employee{
public ObservableCollection<Clinic> EmployeeClinics { get; set; }
}
当我启动应用程序时,我会看到相应的诊所。下拉菜单似乎显示了正确的选项,但是当我更新它们时,只有名称更新而不是 ClinicId(它保留以前的 ClinicId)。
编辑:类似地,当我将一个新诊所添加到列表中并从选项中选择它时,当我查看该集合时,它的 Id 为 0。
这是我的诊所模型。
public class Clinic {
public int ClinicId { get; set; }
public string _name { get; set; }
public string Name {
get {
return _name;}
set {
if (_name != value) {
_name = value;
}
}
}
}
更新:感谢@AyyappanSubramanian。我正在取得进展。我已经更新了我的对象
public class Employee{
public ObservableCollection<ClinicView> EmployeeClinics { get; set; }
}
public class ClinicView {
private Clinic selectedClinic;
public Clinic SelectedClinic {
get { return selectedClinic; }
set {
selectedClinic = value;
selectedClinicId = selectedClinic.ClinicId;
}
}
private int selectedClinicId;
public int SelectedClinicId {
get { return selectedClinicId; }
}
}
XAML:
<ComboBox ItemsSource="{Binding Source={StaticResource ClinicList}}" DisplayMemberPath="Name" SelectedItem="{Binding SelectedClinic}"></ComboBox>
现在更改下拉列表可以正确更改基础对象并根据需要更新列表。现在我唯一的问题是组合框不显示当前对象,只是在开始时显示为空白。我已经搞砸了 SelectedValue 和 Path 没有运气。有什么建议吗?
【问题讨论】:
-
您能否发布模型和视图模型以重现您的问题。
-
将绑定从 StaticResource 更改为 DynamicResource 会发生什么?
-
@AyyappanSubramanian 我已经更新了帖子。这有帮助吗?正如在 Fabio 的回答中一样,我已经发表了评论,并且可以让名称正确显示,但 ID 不会根据新选择进行更新。
-
在组合框中添加 SelectedValuePath="ClinicId"
-
@AyyappanSubramanian 我发布了新的工作代码,显示它加载了正确的项目,我无法分配 selectedvaluepath 2x。如果我在那里没有名称,它将不再像显示的那样工作。
标签: wpf data-binding combobox