C# 如何在MVVM中处理数据?
读取数据非常简单:C# 如何在MVVM中处理数据?,c#,wpf,mvvm,C#,Wpf,Mvvm,读取数据非常简单: ViewModel从数据库获取数据 ViewModel将数据添加到ObservableCollection 视图将列表/DataGrid/etc绑定到ObservableCollection 详情如下: private readonly ObservableCollection\u用户 =新的ObservableCollection(); 公共IEnumerable用户 { 获取{return\u users;} } 公用ICommand列表用户命令 { 得到 { 返回新剂量
private readonly ObservableCollection\u用户
=新的ObservableCollection();
公共IEnumerable用户
{
获取{return\u users;}
}
公用ICommand列表用户命令
{
得到
{
返回新剂量计(ListUsers);
}
}
私有无效列表用户()
{
使用(OrtundDbContext db=new OrtundDbContext())
{
var Users=db.Users.Where(x=>x.Deleted==false);
foreach(用户中的var u)
{
如果(!\u用户。包含(u))
_用户。添加(u);
}
}
}
因此,这允许在xaml中绑定到用户
,因此,假设大致相反似乎是合乎逻辑的。窗口上控件的更新值可以发回,并在ViewModel中用于更新那里的数据源
不幸的是,事情不是这样的
目前我有以下几点:
确保将文本框的DataContext
或其任何父元素设置为调用以下命令的UserViewModel
的实际实例:
<StackPanel>
<StackPanel.DataContext>
<local:UserViewModel />
</StackPanel.DataContext>
<Label>Name:</Label>
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<Button Name="btnAdd" Command="{Binding AddUserCommand}" Content="Add User" />
</StackPanel>
姓名:
如果使用上述示例标记并在AddUser()
方法中设置断点,您应该注意到,Name
属性具有在TextBox
中看到的值,请确保将TextBox
的DataContext
或其任何父元素设置为调用以下命令的UserViewModel
的实际实例:
<StackPanel>
<StackPanel.DataContext>
<local:UserViewModel />
</StackPanel.DataContext>
<Label>Name:</Label>
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<Button Name="btnAdd" Command="{Binding AddUserCommand}" Content="Add User" />
</StackPanel>
姓名:
如果使用上述示例标记并在AddUser()
方法中设置断点,您应该注意到Name
属性的值与您在ViewModel上的文本框中看到的值相同。我用属性定义is Name not firing on PropertyChanged替换了那里的注释?它看起来不像,尽管它应该是绑定到Name属性的文本框的DataContext是什么?命令是否被触发,即当您单击按钮时是否进入AddUser()方法?ViewModel上的UserViewModel.Name
defined在哪里。我用属性定义is Name not firing on PropertyChanged替换了那里的注释?它看起来不像,尽管它应该是绑定到Name属性的文本框的DataContext是什么?命令是否被触发,即当您单击该按钮时是否进入AddUser()方法?