为什么在C# WPF Visual Studio 2013中有一个空白的comboBox下拉菜单,即使我已经初始化了它



我想在 win 7 上用 C# WPF VS2013 设计一个组合框,比如

https://msdn.microsoft.com/en-us/library/windows/desktop/dn742404%28v=vs.85%29.aspx#guidelines

我的 xaml 代码:

  <ComboBox Grid.Row="1" Grid.Column="1" 
             SelectedItem="{Binding MyObject}"
             Margin="5"  ItemsSource="{Binding MyObjList}" 
             DisplayMemberPath="Name"
   />
   // MyObjList is a list of MyObject
   public class MyObject
   {
        int id; 
        string Name;
    }

尽管我已经在后面的C#代码中初始化了MyObjList,但下拉列表组合框meue是空白的。

我搜索了一些相关帖子

未选择任何项目时如何在组合框中显示文本?

WPF 组合框错误的空白值

但是,它们都不适合我。

谁能指出我在哪里犯了错误?

J.H 在他的评论中已经给出了您的问题的答案。 让我详细说明一下。

代码中的错误:

  • MyObject的成员应该是Properties的,而不是字段。
  • 此外,与ViewModel成员相同(我希望您已将其定义为字段)

这是工作解决方案:

我的对象.cs

public class MyObject
{
    //int id;
    //string Name;
    public int id { get; set; }
    public string Name { get; set; }
}

我的视图模型.cs

public class MyViewModel
{
    public ObservableCollection<MyObject> MyObjList { get; set; }
}

MainWindow.xaml.cs

public MainWindow()
{
    InitializeComponent();
    ObservableCollection<MyObject> objs = new ObservableCollection<MyObject>();
    objs.Add(new MyObject() { id = 1, Name = "Someone1" });
    objs.Add(new MyObject() { id = 2, Name = "Someone2" });
    this.DataContext = new MyViewModel() { MyObjList = objs };
 }

MainWindow.xaml

<ComboBox Grid.Row="1" Grid.Column="1" 
             SelectedItem="{Binding MyObject}"
             Margin="5"  ItemsSource="{Binding MyObjList}" 
             DisplayMemberPath="Name"/>

最新更新