如何从 ViewModel 访问 ObservableCollection 中的数据
本文关键字:数据 ObservableCollection 访问 ViewModel | 更新日期: 2023-09-27 18:30:54
这可能是
一个很长的机会,但我所做的是创建一个表示数据库中表的模型。
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 | 名字 | 姓氏 | 性别 | 年龄
数据
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 根据当时选择的人员执行相当多的查询。例如,将当前用户完全保存到另一个表。
就像我说的。这是一个很长的镜头。这能做到吗?我想我现在的思维逻辑是,如果视图可以访问这些数据,那么视图模型为什么不能。
我建议您先通读MSDN上的数据绑定概述页面...您需要了解数据绑定。典型的设置如下所示:
您的视图模型:
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}" />
现在,当应用程序用户更改ListBox
中的选定User
时,将更新 SelectedUser
属性以反映这一点。因此,当他们单击"保存Button
"时,您可能会执行以下操作:
DataProvider.SaveUser(SelectedUser);