C#WPF MVVM无法显示列表的元素
我正试图用MVVM模式编写一个简单的WPF应用程序,但是显示列表元素不起作用。我很确定绑定有问题,因为这是我第一次使用它C#WPF MVVM无法显示列表的元素,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正试图用MVVM模式编写一个简单的WPF应用程序,但是显示列表元素不起作用。我很确定绑定有问题,因为这是我第一次使用它 <Window.Resources> <local:ViewModel x:Key="test"/> </Window.Resources> <Grid> <ListView Name="lstPersons" ItemsSource="{Binding test.peop
<Window.Resources>
<local:ViewModel x:Key="test"/>
</Window.Resources>
<Grid>
<ListView Name="lstPersons" ItemsSource="{Binding test.peopleList}" >
<ListView.View>
<GridView.Columns>
<GridViewColumn Header="name" DisplayMemberBinding="{Binding name}" />
<GridViewColumn Header="surname" DisplayMemberBinding="{Binding surname}" />
查看模型片段:
public class ViewModel
{
private personModel.Root peopleDB = new personModel.Root();
public ViewModel()
{ }
public List<personModel.Person> peopleList
{
get { return peopleDB.people; }
}
public class Root
{
public List<Person> people;
public Root()
{
people = new List<Person>();
people.Add(new Person("aa", "aa", 1, new Adress("bb", "cc")));
people.Add(new Person("bb", "bb", 1, new Adress("bb", "cc")));
people.Add(new Person("cc", "cc", 1, new Adress("bb", "cc")));
}
}
public class Person
{
public string name { get; set; }
public string surname { get; set; }
public int age { get; set; }
public Adress address { get; set; }
公共类视图模型
{
private personModel.Root peopleDB=new personModel.Root();
公共视图模型()
{ }
公众名单
{
获取{return peopleDB.people;}
}
模型类片段:
public class ViewModel
{
private personModel.Root peopleDB = new personModel.Root();
public ViewModel()
{ }
public List<personModel.Person> peopleList
{
get { return peopleDB.people; }
}
public class Root
{
public List<Person> people;
public Root()
{
people = new List<Person>();
people.Add(new Person("aa", "aa", 1, new Adress("bb", "cc")));
people.Add(new Person("bb", "bb", 1, new Adress("bb", "cc")));
people.Add(new Person("cc", "cc", 1, new Adress("bb", "cc")));
}
}
public class Person
{
public string name { get; set; }
public string surname { get; set; }
public int age { get; set; }
public Adress address { get; set; }
公共类根目录
{
公众人物名单;
公共根()
{
人员=新列表();
添加(新的人(“aa”,“aa”,1,新地址(“bb”,“cc”));
添加(新的人(“bb”,“bb”,1,新地址(“bb”,“cc”));
添加(新的人(“抄送”、“抄送”,1,新地址(“bb”、“抄送”));
}
}
公共阶层人士
{
公共字符串名称{get;set;}
公共字符串姓氏{get;set;}
公共整数{get;set;}
公共地址{get;set;}
使用绑定尝试了两种方法,但都不起作用:/通过将以下内容添加到xaml文件,将DataContext设置为viewmodel:
<Window.DataContext>
<local:ViewModel>
</Window.DataContext>
然后,当您需要绑定某些内容时,您可以使用:
<ListView Name="lstPersons" ItemsSource="{Binding peopleList}" >
这里的问题听起来像是您的
DataContext
没有设置
有多种方法可以做到这一点。例如,您可以使用XAML或Windows手动硬编码DataContext
<Window.DataContext>
<local:ViewModel>
</Window.DataContext>
现在.DataContext
设置正确,请更改绑定
<ListView ItemsSource="{Binding peopleList}">
我更喜欢这种方式,因为很明显,只要看看ListView XAML,您就可以绑定到一个静态源,并且当您试图将一个动态源传递到控件中,并且发现DataContext没有设置为您期望的值时,它可以避免以后的所有麻烦
作为旁注,如果您在理解
DataContext
的用途或工作原理方面遇到困难,我倾向于将初学者链接到更详细的解释:)我认为其中一个问题是您需要设置DataContext。
。您需要将绑定的源从默认更改为默认(当前.DataContext
)到您的.Resources中找到的版本。旁注-我讨厌这种设置DataContext
的方式。这意味着您的视图绑定到它自己的数据副本,不能从其他地方绑定或传递。但它确实可以工作,如果您刚开始就可以了。只是不要过多地使用它:)另一种选择是在视图的xaml.cs构造函数中设置DataContext。DataContext=new ExampleViewModel();