Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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# 将模型的另一个实例指定给ViewModel_C#_Xaml_Mvvm - Fatal编程技术网

C# 将模型的另一个实例指定给ViewModel

C# 将模型的另一个实例指定给ViewModel,c#,xaml,mvvm,C#,Xaml,Mvvm,我试图实现一个MVVMUserControl,用于编辑单个类实例(例如Person类的实例)的信息。我创建了一个视图、一个视图模型和一个模型。当我的应用程序启动视图时,视图会在其DataContext中自动实例化ViewModel。ViewModel使用模型类的新实例进行实例化 现在,当我为ViewModel.Source属性指定另一个人时,视图中的属性不会更新(因为DataContext没有更改,我也没有引发PropertyChanged事件。当然,当分配一个新的Person实例时,我可以在V

我试图实现一个MVVMUserControl,用于编辑单个类实例(例如Person类的实例)的信息。我创建了一个视图、一个视图模型和一个模型。当我的应用程序启动视图时,视图会在其DataContext中自动实例化ViewModel。ViewModel使用模型类的新实例进行实例化

现在,当我为ViewModel.Source属性指定另一个人时,视图中的属性不会更新(因为DataContext没有更改,我也没有引发PropertyChanged事件。当然,当分配一个新的Person实例时,我可以在ViewModel类的所有属性上引发property changed事件。但是这是否合适?没有更好的方法吗?我是否必须为每个Person实例创建一个新的ViewModel,然后将其分配给e View.DataContext

这是三个类的大致情况:

<UserControl x:Class="PersonView" xmlns:vm="clr-namespace:MyNamespace">
    <UserControl.Resources>
        <vm:PersonViewModel x:Key="viewmodel" />
    </UserControl.Resources>
    <Grid>
        <TextBox x:Name="txLastName" Grid.Row="1" Grid.Column="1"  Text="{Binding Path=txLastName}" />
   </Grid>
</UserControl>

如果绑定是以这种方式构造的,那么是的,当您更改
时,您需要为依赖它的任何属性发出属性更改通知。请注意,
RaisePropertyChanged(string.Empty)
通常被解释为“所有属性已更改”

如果ViewModel中没有属性的组合(如示例中所示,所有属性都是简单的委托),并且模型的属性没有更改(或者,如果它们可以更改,则模型实现
INotifyPropertyChanged
),那么直接绑定到模型可能更简单(例如
{Binding Path=Source.LastName}
)。这样,当
Source
更改时,依赖
Source
的所有绑定都将更新