C# 将ObservableCollection绑定到MVVM中的ListView-显示特定属性

C# 将ObservableCollection绑定到MVVM中的ListView-显示特定属性,c#,wpf,mvvm,C#,Wpf,Mvvm,所以我得到了一个模型: public class MyModel{ public ObservableCollection<MyObject> myObject {get; set;} } 这是我的ViewModel的相关部分: private MyModel theModel = new MyModel(); public MyModel TheModel {get; set;} 这就是观点 <ListView.BindingContext> <

所以我得到了一个模型:

public class MyModel{
     public ObservableCollection<MyObject> myObject {get; set;}
}
这是我的ViewModel的相关部分:

private MyModel theModel = new MyModel();
public MyModel TheModel {get; set;}
这就是观点

<ListView.BindingContext>
   <viewmodel:MyViewVM/>
</ListView.BindingContext>
<Label Text="{Binding myModel.myObject.number"} .... />

  • 为什么它只显示最后一个数字
  • 我如何说:ItemsSource应该是模型;但是在列表中,应该只显示模型内对象的“number”或“name”属性

    • 我想你在用这个

      你应该使用,这就是WPF

      使用正确的XAML后,将XAML更改为:

      <ListView ItemsSource="{Binding myObject}" DisplayMemberPath="number">
          <ListView.DataContext>
              <local:MyModel />
          </ListView.DataContext>
      </ListView>
      
      
      
      其他类基本不变,我只是添加了一些示例数据:

      public class MyModel
      {
          public MyModel()
          {
              myObject = new ObservableCollection<MyObject>
              {
                  new MyObject { name = "John", number = 5 },
                  new MyObject { name = "Jane", number = 6 },
                  new MyObject { name = "Sam", number = 9 },
                  new MyObject { name = "Lara", number = 16 }
              };
          }
      
          public ObservableCollection<MyObject> myObject { get; set; }
      }
      
      public class MyObject
      {
          public int number { get; set; }
          public string name { get; set; }
      }
      
      公共类MyModel
      {
      公共MyModel()
      {
      myObject=新的可观察集合
      {
      新的MyObject{name=“John”,number=5},
      新的MyObject{name=“Jane”,number=6},
      新的MyObject{name=“Sam”,number=9},
      新的MyObject{name=“Lara”,number=16}
      };
      }
      公共可观察集合myObject{get;set;}
      }
      公共类MyObject
      {
      公共整数{get;set;}
      公共字符串名称{get;set;}
      }
      
      如果向
      myObject
      集合添加新元素(顺便说一句,我建议对公共属性名称使用PascalCase),UI将被更新。 注意,如果您更改了
      MyObject
      元素属性之一(例如
      name
      ),您将不会在UI上看到该属性

      要获得正确的更改通知,请实现该接口

      public class MyModel
      {
          public MyModel()
          {
              myObject = new ObservableCollection<MyObject>
              {
                  new MyObject { name = "John", number = 5 },
                  new MyObject { name = "Jane", number = 6 },
                  new MyObject { name = "Sam", number = 9 },
                  new MyObject { name = "Lara", number = 16 }
              };
          }
      
          public ObservableCollection<MyObject> myObject { get; set; }
      }
      
      public class MyObject
      {
          public int number { get; set; }
          public string name { get; set; }
      }