【问题标题】:Binding ObservableCollection to ListView in MVVM - show specific property在 MVVM 中将 ObservableCollection 绑定到 ListView - 显示特定属性
【发布时间】:2016-04-25 19:38:28
【问题描述】:

所以我得到了一个模型:

public class MyModel{
     public ObservableCollection<MyObject> myObject {get; set;}
}

其中有一个“MyObject”对象

public class MyObject{
     public int number {get; set;}
     public string name {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 应该是模型;但是在列表中,应该只显示模型内部对象的“编号”或“名称”属性?

【问题讨论】:

    标签: c# wpf mvvm


    【解决方案1】:

    我想你正在使用这个ListView from System.Windows.Forms

    您应该使用the one in System.Windows.Controls,这是 WPF 之一。

    一旦您使用了正确的,您将您的 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; }
    }
    

    如果您向myObject 集合添加新元素(顺便说一句,我建议对公共属性名称使用 PascalCase),UI 将被更新。 请注意,如果您更改 MyObject 元素属性之一(例如 name),您将不会在 UI 上看到它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-05
      • 2012-05-26
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      相关资源
      最近更新 更多