Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MVVM中处理数据?_C#_Wpf_Mvvm - Fatal编程技术网

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列表用户命令 { 得到 { 返回新剂量

读取数据非常简单:

  • ViewModel从数据库获取数据
  • ViewModel将数据添加到ObservableCollection
  • 视图将列表/DataGrid/etc绑定到ObservableCollection
  • 详情如下:

    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()方法?