【发布时间】:2019-08-16 19:56:54
【问题描述】:
我正在尝试将组合框选定项绑定到视图模型上的对象。它绑定 itemsource 并将保存所选项目,但是如果我在加载时填充所选项目的值,它将不会显示。
这是 ComboBox 的 XAML:
<ComboBox Name="cbxProjects"
ItemsSource="{Binding Projects}"
DisplayMemberPath="Name"
SelectedItem="{Binding Path=SelectedProject, Mode=TwoWay}"
以下是我要绑定的类:
private Collection<ProjectTest> projects;
public Collection<ProjectTest> Projects
{
get { return projects; }
set
{
projects = value;
RaisePropertyChangedEvent("Projects");
}
}
private ProjectTest selectedProject;
public ProjectTest SelectedProject
{
get { return selectedProject; }
set
{
selectedProject = value;
RaisePropertyChangedEvent("SelectedProject");
}
}
这是我的视图模型初始化器:
public MyViewModel(ProjectHelper projectHelper)
{
Projects = new Collection<ProjectTest>();
Projects.Add(new ProjectTest("Project1"));
Projects.Add(new ProjectTest("Project2"));
Projects.Add(new ProjectTest("Project3"));
SelectedProject = new ProjectTest("Project2");
}
当我运行它时,我希望组合框在下拉列表中有 3 个项目,并且已经选择了“Project2”。
情况并非如此,因为没有选择任何内容。
【问题讨论】:
-
您正在为
SelectedProject创建一个新对象您尝试过SelectedProject = Projects[1];吗? -
您为 SelectedProject 创建了一个新的
ProjectTest对象,您应该将现有的一个对象形成集合 -
标记的副本是错误的。重复的答案是,
Mode=TwoWay没有设置,这里已经是这种情况。 -
您也可以考虑使用 SelectedValue 和 SelectedValuePath 代替 SelectedItem。假设 ProjectTest 有一个 Name 属性,设置
SelectedValuePath="Name"并将 SelectedValue 绑定到一个按名称选择的字符串属性。 -
@Clemens 你是对的,我没有仔细阅读。虽然我花了一段时间才找到,但我认为将这个问题标记为重复可能会更好,因为答案更详细地解释了 Sam 面临的问题:stackoverflow.com/questions/8330521/…