这可能是一个长镜头,但我所做的是在我的数据库中创建一个表示表的模型。
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 | gender | age
数据
1 | John | Smith | Male | 32
2 | Brad | Reed | Male | 28
3 | Titus | Ward | Male | 25
4 | Seth | Shaw | Male | 26
因此,由于我正在尝试使用 mvvm 模式,因此我有一个 View 模型。这个 View 模型有一个可观察的集合,代表上面声明的模型。它还有五个属性,每个属性分别代表Table中的一个字段,这就是问题所在;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 绑定(bind)到 ObservableCollection(在我的例子中为“User”),然后将其列绑定(bind)到模型内的属性。那会很好用。
但是,我需要的是 ViewModel 中的属性包含选定的记录,并将我的 UI 元素(例如文本框)绑定(bind)到 View 模型的属性。这是因为我需要虚拟机根据当时选择的人进行大量查询。例如,将当前用户完全保存到另一个表中。
就像我说的。这是一个长镜头。这可以做到吗?我想我现在的思考逻辑是,如果 View 可以访问这些数据,那么为什么 ViewModel 不能。
最佳答案
我建议您通读 Data Binding Overview首先在 MSDN 上的页面...您需要了解数据绑定(bind)。典型的设置如下所示:
您的 View 模型:
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
属性将被更新以反射(reflect)这一点。所以当他们点击保存 Button
,你可能会做这样的事情:DataProvider.SaveUser(SelectedUser);
关于c# - 如何从 ViewModel 访问 ObservableCollection 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26995161/