C# 如何将数据从XAML添加到listView,并将数据绑定到我的ViewModel

C# 如何将数据从XAML添加到listView,并将数据绑定到我的ViewModel,c#,wpf,xaml,microsoft-metro,C#,Wpf,Xaml,Microsoft Metro,我对XAML和Windows8应用程序编程和总体编程都是相当陌生的。我已经试了好几天了。 我有一个名为PeopleConnector的ViewModel,其中包含一组可观察到的人 我已经将XAML页面的DataContext设置为我的ViewModel。 现在,我希望能够在我的视图中创建一个新的人物,使用文本框中的输入,并通过双向数据绑定将其显示在我的列表中。 正确的方法是什么。我可以在XAML页面的代码隐藏中实现这一点,但是我跳过了viewModel。 这可以通过我的ViewModel实现吗

我对XAML和Windows8应用程序编程和总体编程都是相当陌生的。我已经试了好几天了。 我有一个名为PeopleConnector的ViewModel,其中包含一组可观察到的人 我已经将XAML页面的DataContext设置为我的ViewModel。 现在,我希望能够在我的视图中创建一个新的人物,使用文本框中的输入,并通过双向数据绑定将其显示在我的列表中。 正确的方法是什么。我可以在XAML页面的代码隐藏中实现这一点,但是我跳过了viewModel。 这可以通过我的ViewModel实现吗

代码

Person类是一个简单的Poco类,继承了BindableBase

我的视图模型(人员连接器)

class PeopleConnector:BindableBase
{
私人可观察的收集人;
公众观察收集人
{
获取{return\u people;}
设置{u people=value;OnPropertyChanged();}
}
公共人物连接器()
{
人员=新的可观察集合();
添加(newperson{Name=“Iris”,About=“热爱Metro风格的开发者”});
添加(newperson{Name=“Paul”,About=“DBA with a thing for SQL Server 2012”});
}
公共人物NewPerson{get;set;}
public void AddNewPerson()
{
添加(NewPerson{Name=NewPerson.Name,About=NewPerson.About});
}
}
我的视图(XAML页面)


名称
关于
添加

这里有一些地方不对劲:

首先,您没有初始化
NewPerson
。在
PeopleConnector
构造函数中,您需要初始化
NewPerson

接下来,您无法告诉ViewModel您单击了一个按钮。通常,您可以通过将ViewModel上的ICommand实例绑定到视图来实现这一点(有关可能的实现,请参阅DelegateCommand)。因此,您的按钮将更改为:

<Button VerticalAlignment="Top" Margin="30" Width="130" Command={Binding Path=AddPersonCommand}>Add</Button>
添加
您的ViewModel构造函数将如下所示:

public PeopleConnector()
{
    People = new ObservableCollection<Person>();
    People.Add(new Person { Name = "Iris", About = "Developer that loves Metro style" });
    People.Add(new Person { Name = "Paul", About = "DBA with a thing for SQL Server 2012" });
    NewPerson = new Person();
    _addPersonCommand = new DelegateCommand(AddNewPerson);
}

private readonly DelegateCommand _addPersonCommand;
public ICommand AddPersonCommand
{
    get { return _addPersonCommand; }
}
PublicPeopleConnector()
{
人员=新的可观察集合();
添加(newperson{Name=“Iris”,About=“热爱Metro风格的开发者”});
添加(newperson{Name=“Paul”,About=“DBA with a thing for SQL Server 2012”});
NewPerson=NewPerson();
_addPersonCommand=newdelegateCommand(AddNewPerson);
}
私有只读DelegateCommand _addPersonCommand;
公共ICommand AddPersonCommand
{
获取{return\u addPersonCommand;}
}
<Button VerticalAlignment="Top" Margin="30" Width="130" Command={Binding Path=AddPersonCommand}>Add</Button>
public PeopleConnector()
{
    People = new ObservableCollection<Person>();
    People.Add(new Person { Name = "Iris", About = "Developer that loves Metro style" });
    People.Add(new Person { Name = "Paul", About = "DBA with a thing for SQL Server 2012" });
    NewPerson = new Person();
    _addPersonCommand = new DelegateCommand(AddNewPerson);
}

private readonly DelegateCommand _addPersonCommand;
public ICommand AddPersonCommand
{
    get { return _addPersonCommand; }
}