gpt4 book ai didi

c# - 如何从 ViewModel 访问 ObservableCollection 中的数据?

转载 作者:行者123 更新时间:2023-12-03 10:58:53 25 4
gpt4 key购买 nike

这可能是一个长镜头,但我所做的是在我的数据库中创建一个表示表的模型。

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}" />

现在,当应用程序用户更改选定的 UserListBox , SelectedUser属性将被更新以反射(reflect)这一点。所以当他们点击保存 Button ,你可能会做这样的事情:
DataProvider.SaveUser(SelectedUser);

关于c# - 如何从 ViewModel 访问 ObservableCollection 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26995161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com