WPF:从 MVVM 中的视图模型绑定列表视图项目源
WPF: Binding listview itemsource from viewmodel in MVVM
我试图为列表视图设置 ItemSource 属性 但没有成功。
查看 (xaml):
<ListView Margin="10" Name="MyLv" ItemsSource="{Binding}">
....
</ListView>
代码隐藏构造函数 (xaml.cs):
public MyView()
{
InitializeComponent();
}
ViewModel:
private List<DataModel> lstData = null;
public MyViewModel()
{
this.lstData = this.LoadData(); // this connects to a database an extract info to be loaded in listview
}
数据模型:
public class DataModel
{
public bool IsSelected { get; set; }
public string ID { get; set; }
public string Desc { get; set; }
}
在此之前,我从代码隐藏加载列表视图并且它正在工作,但现在我想从我的视图模型加载它,但我不知道如何让它工作。
根据您发布的代码,存在几个问题:
您还没有设置视图的DataContext
。您通常希望将其设置为视图模型的一个实例 class.
ViewModel
不会将列表公开为 public 属性。 WPF 绑定仅适用于 public 属性。 ItemsSource
应该绑定到这个 属性,而不是 DataContext
本身。
最后,您可能希望 ViewModel
中的集合是 ObservableCollection
。这样,当对集合进行更改时,UI 中的列表将自动更新。
我试图为列表视图设置 ItemSource 属性 但没有成功。
查看 (xaml):
<ListView Margin="10" Name="MyLv" ItemsSource="{Binding}">
....
</ListView>
代码隐藏构造函数 (xaml.cs):
public MyView()
{
InitializeComponent();
}
ViewModel:
private List<DataModel> lstData = null;
public MyViewModel()
{
this.lstData = this.LoadData(); // this connects to a database an extract info to be loaded in listview
}
数据模型:
public class DataModel
{
public bool IsSelected { get; set; }
public string ID { get; set; }
public string Desc { get; set; }
}
在此之前,我从代码隐藏加载列表视图并且它正在工作,但现在我想从我的视图模型加载它,但我不知道如何让它工作。
根据您发布的代码,存在几个问题:
您还没有设置视图的
DataContext
。您通常希望将其设置为视图模型的一个实例 class.ViewModel
不会将列表公开为 public 属性。 WPF 绑定仅适用于 public 属性。ItemsSource
应该绑定到这个 属性,而不是DataContext
本身。
最后,您可能希望 ViewModel
中的集合是 ObservableCollection
。这样,当对集合进行更改时,UI 中的列表将自动更新。