这可能是一个很长的镜头,但我所做的是创建一个代表我的数据库中的表的模型。
public partial class users
{
public int id { get; set }
public string firstName { get; set; }
public string surname { get; set; }
public string gender { get; set; }
public string age { get; set; }
}
我的数据库看起来像这样,具有以下值 图书:
id | firstName | surName |性别|年龄
数据
1 |约翰|史密斯|男| 32
2 |布拉德|里德|男| 28
3 |提图斯|沃德|男| 25
4 |赛斯|肖|男| 26
因为我正在尝试使用mvvm模式,所以我有一个视图模型。此视图模型具有一个可观察的集合,表示声明的上述模型。它还有五个属性,每个属性分别代表表中的一个字段,这是问题所在的地方;
public class ViewModel
{
#region ObservableCollection
private ObservableCollection<users> _user;
public ObservableCollection<users> User
{
get { return _user; }
set
{ if (_user != value)
value = _user;
OnPropertyChanged("User"); }
}
#endregion
#region Properties
private string _id;
public string Id
{
get { return _id; }
set { if (value != _id)
_id= value;
OnPropertyChanged("Id");
}
}
private string _firstName;
public string FirstName
{
get { return _firstName; }
set { if (value != _firstName)
_firstName = value;
OnPropertyChanged("FirstName");
}
}
private string _surName;
public string SurName
{
get { return _surName; }
set { if (value != _surName)
_surName = value;
OnPropertyChanged("SurName");
}
}
private string _gender;
public string Gender
{
get { return _gender; }
set { if (value != _gender )
_gender = value;
OnPropertyChanged("Gender");
}
}
private string _age;
public string Age
{
get { return _age; }
set { if (value != _age )
_age = value;
OnPropertyChanged("Age");
}
}
通常,如果您想在UserControl中传达这些细节,您需要创建一个DataGrid,将它的ItemSource绑定到ObservableCollection(在我的情况下为'User'),然后将其列绑定到模型内的属性。那会很好。
然而,我需要的是我的ViewModel中的属性包含所选记录并将我的UI元素(例如文本框)绑定到视图模型的属性。这是因为我需要VM根据当时选择的人进行相当多的查询。例如,将当前用户完全保存到另一个表。
像我说的那样。这是一个很长的镜头。可以这样做吗?我想我现在的思考逻辑是,如果视图可以访问这些数据,那么为什么ViewModel不会。答案 0 :(得分:3)
我建议您首先阅读MSDN上的Data Binding Overview页面...您需要了解数据绑定。典型的设置如下:
您的观看模型:
public ObservableCollection<User> Users
{
get { return users; }
set { users = value; NotifyPropertyChanged("Users"); }
}
public User SelectedUser
{
get { return user; }
set { user = value; NotifyPropertyChanged("SelectedUser"); }
}
您的观点:
<ListBox ItemsSource="{Binding Users}" SelectedItem="{Binding SelectedUser}" />
现在,当应用程序用户更改User
中选定的ListBox
时,SelectedUser
属性将更新以反映出来。因此,当他们点击保存Button
时,您可能会执行以下操作:
DataProvider.SaveUser(SelectedUser);