我有一个使用MVVM的WPF应用程序。我有一些用户控件,应该使用简单的数据绑定在3个Textbox控件中显示Person FirstName,LastName和email。
用户控件有一个简单的组合框,用户可以在其中选择用户的ID,因此应该加载具有该ID的人员记录(从数据库中提取数据),然后将显示FirstName,LastName和Email。文本框。
我有一个Usercontrol,其中包含三个属性的ID和3个文本框的组合框,一个ViewModel类和一个具有三个属性(FirstName,LastName和Email)的Model类(person类)。
使用MVVM(最好)实现此行为的最简单方法是什么?任何样品?
答案 0 :(得分:6)
我猜这里是因为你的问题有点模糊,以至于你不太确定如何把各个部分挂钩。为简单起见,我们将ViewModel直接挂钩到用户控件并将其全部绑定。
只要您的视图模型使用正确的人员集填充,下面的所有绑定都将处理数据并显示正确的数据。记下组合框中所选项目的双向绑定。这允许WPF将新选择的项目发送回viewmodel。
在UserControl的代码背后:
public MyUserControl()
{
DataContext = new MyViewModel();
}
在UserControl的XAML中:
<ComboBox ItemsSource="{Binding AllPeople}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
<TextBox Text="{Binding SelectedItem.LastName}" />
<TextBox Text="{Binding SelectedItem.FirstName}" />
<TextBox Text="{Binding SelectedItem.EmailName}" />
您的ViewModel:
private IEnumerable<Person> _allPeople;
public IEnumerable<Person> AllPeople
{
get { return _allPeople; }
set
{
if (_allPeople != value)
{
_allPeople = value;
NotifyPropertyChanged("AllPeople");
}
}
}
private Person _selectedItem;
public Person SelectedItem
{
get { return _selectedItem; }
set
{
if (!_selectedItem != value)
{
_selectedItem = value;
NotifyPropertyChanged("SelectedItem");
}
}
}
private void NotifyPropertyChanged(string propertyName)
{
if ( PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName);
}
}
}
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}