C# 在代码隐藏中初始化ViewModel时,ListView不显示ViewModel中的数据

C# 在代码隐藏中初始化ViewModel时,ListView不显示ViewModel中的数据,c#,wpf,mvvm,C#,Wpf,Mvvm,我是WPF的新手,我仍然有点困惑绑定是如何工作的。基本上,如果我重新初始化ViewModel,我有一个不会刷新的列表: <Window.Resources> <ViewModels:MyViewModel x:Key="myViewModel"/> <!-- ... --> <ListView x:Name="MyList" HorizontalContentAlignment="Stretch" DataContext

我是WPF的新手,我仍然有点困惑绑定是如何工作的。基本上,如果我重新初始化
ViewModel
,我有一个不会刷新的列表:

<Window.Resources>
    <ViewModels:MyViewModel x:Key="myViewModel"/>

<!-- ... -->

<ListView x:Name="MyList" HorizontalContentAlignment="Stretch" 
          DataContext="{StaticResource myViewModel}"
          ItemsSource="{Binding Customers}"
          DockPanel.Dock="Top">
我在视图上有一个方法,可以再次初始化
ViewModel
,从数据库重新加载新数据:

vm = new MyViewModel();
但是,新数据不会自动显示在
列表视图
中,除非我在再次初始化
视图模型
后,在代码隐藏中指定
列表视图
数据上下文

vm = new AnswersViewModel();
MyListView.DataContext = vm;
我有点困惑,我必须显式地设置
DataContext
,因为我认为在xaml文件中,在窗口的资源下指定
ViewModel
,会导致每次初始化时数据都绑定到视图模型


谢谢

首先,创建一个对象
vm1
,并将其放入视图的数据上下文中。 当将
vm1
放在视图的数据上下文中时,视图将绑定到
vm1

刷新数据时,将使用刷新的数据创建对象
vm2
。 但是视图与
vm1
的数据绑定,然后视图显示
vm1
的旧数据

当将
vm2
放在视图的数据上下文中时,视图将绑定到
vm2
,视图将显示
vm2
的刷新数据

正如@canton7在评论中所说,如果没有充分的理由,最好更新
vm1
中的数据来更新视图。
在MVVM中,您将视图与ViewModel链接(放入数据上下文中),并且仅与ViewModel一起使用。

您创建了一个新的、完全独立的
MyViewModel
实例,该实例与第一个实例没有连接。为什么第一个实例会被第二个实例神奇地替换?您是否在视图模型中实现了?
INotifyPropertyChanged
如果视图模型只包含
ObservableCollection
,则无需更改。谢谢!“为什么第一个实例会被第二个实例神奇地替换?”:)那么我该如何重新查询ViewModel并显示数据呢?我是否需要分配DataContext,或者有其他方法不创建ViewModel的新实例。
vm = new AnswersViewModel();
MyListView.DataContext = vm;