C# 在代码隐藏中初始化ViewModel时,ListView不显示ViewModel中的数据
我是WPF的新手,我仍然有点困惑绑定是如何工作的。基本上,如果我重新初始化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
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;