Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WPF MVVM无法显示列表的元素_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C#WPF MVVM无法显示列表的元素

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

我正试图用MVVM模式编写一个简单的WPF应用程序,但是显示列表元素不起作用。我很确定绑定有问题,因为这是我第一次使用它

 <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();