2016-01-20 69 views
-3

所以我得到了一個模型:綁定的ObservableCollection在MVVM的ListView - 顯示特定屬性

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

而且裏面的它是「MyObject來」對象

public class MyObject{ 
    public int number {get; set;} 
    public string name {get; set;} 
} 

這是我的視圖模型的相關部分:

private MyModel theModel = new MyModel(); 
public MyModel TheModel {get; set;} 

這是查看

<ListView.BindingContext> 
    <viewmodel:MyViewVM/> 
</ListView.BindingContext> 
<Label Text="{Binding myModel.myObject.number"} .... /> 
  • 爲什麼只顯示最後一個數字?
  • 我該怎麼說:ItemsSource應該是模型;但是在列表中,應該只顯示模型內部對象的「數字」或「名稱」屬性?

回答

0

我覺得你用這個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接口。