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

标签 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; }
}

我的数据库看起来像这样,具有以下值
标题:

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/

相关文章:

asp.net-mvc - MVVM 模式的核心是什么?

mvvm - 如何使用 Hilt (Jetpack Compose) 将 ViewModel 注入(inject)可组合函数

wpf - 将 ListBoxItem 的内容绑定(bind)到不相关的内容

c# - 如何在 C# MVC 中接收 JSON 主体(无 ajax)

c# - 将 8 位数字转换为日期时间类型

c# - HierarchicalDataTemplate.Triggers 是否支持条件绑定(bind)到 ItemsSource 和 ItemTemplate?

wpf - 无法将所有者属性设置为已关闭的窗口 : Exception

c# - 我如何使用 Moq 来模拟一个接口(interface),该接口(interface)具有将具体类作为参数的方法?

c# - 计算数组元素子集的最佳方法

c# - WPF 在 C# 代码中更改工具提示背景