【问题标题】:How to get Selected Item of Combobox to bind to object [duplicate]如何使组合框的选定项目绑定到对象[重复]
【发布时间】: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/…

标签: c# wpf xaml mvvm


【解决方案1】:

new ProjectTest("Project2") 不等于您添加到Projects 集合中的任何ProjectTest,除非您的ProjectTest 类实现IEquatable&lt;T&gt; 以定义两个同名项目被视为相等.

另一种选择是将SelectedProject 属性设置为Projects 中的任何对象:

SelectedProject = Projects[1];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2011-03-23
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多