C# 如何从ViewModel访问ObservableCollection中的数据?
这可能不太可能,但我所做的是在数据库中创建一个表示表的模型C# 如何从ViewModel访问ObservableCollection中的数据?,c#,wpf,mvvm,C#,Wpf,Mvvm,这可能不太可能,但我所做的是在数据库中创建一个表示表的模型 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; } }
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");
}
}
公共类视图模型
{
#区域可观测集合
私有可观察收集用户;
公共可观测收集用户
{
获取{return\u user;}
设置
{if(_user!=值)
值=_用户;
OnPropertyChanged(“用户”);}
}
#端区
#区域属性
私有字符串_id;
公共字符串Id
{
获取{return\u id;}
设置{if(值!=\u id)
_id=值;
OnPropertyChanged(“Id”);
}
}
私有字符串_firstName;
公共字符串名
{
获取{return\u firstName;}
设置{if(值!=\u firstName)
_firstName=值;
OnPropertyChanged(“名字”);
}
}
私人字符串(姓氏),;
公共字符串姓氏
{
获取{return}
设置{if(值!=\u姓氏)
_姓氏=价值;
关于财产变更(“姓氏”);
}
}
私人字符串(性别),;
公共字符串性别
{
获取{return\u gender;}
设置{if(值!=\u性别)
_性别=价值;
不动产变更(“性别”);
}
}
私人字符串(u age);;
公共字符串时代
{
获取{return\u age;}
设置{if(值!=\u年龄)
_年龄=价值;
不动产变更(“年龄”);
}
}
因此,通常,如果您想在UserControl中传达这些细节,您需要创建一个DataGrid,将其ItemSource绑定到ObservableCollection(在我的例子中为“用户”),然后将其列绑定到模型内的属性。这样就行了
但是,我需要的是ViewModel中的属性包含所选记录并绑定UI元素(如文本框)改为查看模型的属性。这是因为我需要VM根据当时选择的人员进行大量查询。例如,将当前用户完全保存到另一个表中
正如我所说。这是一个很长的机会。这可以做到吗?我想我现在的思考逻辑是,如果视图可以访问这些数据,那么为什么视图模型不能访问这些数据。我建议您先阅读MSDN上的页面……您需要了解数据绑定。典型的设置如下所示:
DataProvider.SaveUser(SelectedUser);
您的视图模型:
public ObservableCollection<User> Users
{
get { return users; }
set { users = value; NotifyPropertyChanged("Users"); }
}
public User SelectedUser
{
get { return user; }
set { user = value; NotifyPropertyChanged("SelectedUser"); }
}
我建议您先阅读MSDN上的页面……您需要了解数据绑定。典型的设置如下所示:
DataProvider.SaveUser(SelectedUser);
您的视图模型:
public ObservableCollection<User> Users
{
get { return users; }
set { users = value; NotifyPropertyChanged("Users"); }
}
public User SelectedUser
{
get { return user; }
set { user = value; NotifyPropertyChanged("SelectedUser"); }
}
我建议您先阅读MSDN上的页面……您需要了解数据绑定。典型的设置如下所示:
DataProvider.SaveUser(SelectedUser);
您的视图模型:
public ObservableCollection<User> Users
{
get { return users; }
set { users = value; NotifyPropertyChanged("Users"); }
}
public User SelectedUser
{
get { return user; }
set { user = value; NotifyPropertyChanged("SelectedUser"); }
}
我建议您先阅读MSDN上的页面……您需要了解数据绑定。典型的设置如下所示:
DataProvider.SaveUser(SelectedUser);
您的视图模型:
public ObservableCollection<User> Users
{
get { return users; }
set { users = value; NotifyPropertyChanged("Users"); }
}
public User SelectedUser
{
get { return user; }
set { user = value; NotifyPropertyChanged("SelectedUser"); }
}
您需要一个
SelectedItem
属性,将当前选定的数据对象绑定到该属性,然后VM中的属性可以像任何其他属性或方法一样访问它。但您甚至不需要这些单独的属性-视图可以通过SelectedItem属性直接绑定到选定项上的属性。通常,如果你想在用户控件中传达这些细节,你需要创建一个数据网格…这在使用WPF时是一个相当宽泛的声明。我很少使用DataGrid
…跳出框框思考…这就是WPF。@slugster向上看了看。谢谢,这很有帮助…不像我认识的其他一些版主…。我收回了…Sheridan给出的a(我以前没有时间),检查我在下面留下的注释。您需要一个SelectedItem
属性,将当前选定的数据对象绑定到该属性,然后VM中的属性可以像任何其他属性或方法一样访问它。但您甚至不需要这些单独的属性-视图可以通过您的SelectedItem属性。通常,如果您想在用户控件中传达这些详细信息,您需要创建一个DataGrid…这在使用WPF时是一个相当宽泛的声明。我很少使用DataGrid
…跳出框框思考…这是WPF。@slugster正在查找它。谢谢,这很有帮助…与我认识的其他一些版主不同。。。。。。。我收回这一点…谢里登已经给了我一个(我以前没有时间),检查我在下面留下的注释。您需要一个SelectedItem
属性,将当前选定的数据对象绑定到该属性,然后VM中的属性可以像任何其他属性或方法一样访问它。但您甚至不需要这些单独的属性-视图可以通过您的SelectedItem属性。通常,如果您想在用户控件中传达这些详细信息,您需要创建一个DataGrid…这在使用WPF时是一个相当宽泛的声明。我很少使用DataGrid
…跳出框框思考…这是WPF。@slugster正在查找它。谢谢,这很有帮助…与我认识的其他一些版主不同。。。。。。。我收回这一点…Sheridan给出了一个(我之前没有时间),检查我在下面留下的注释。您需要一个SelectedItem
属性,将当前选定的数据对象绑定到该属性,然后是prop