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