C# 如果在查看';s InitializeComponent

C# 如果在查看';s InitializeComponent,c#,wpf,xaml,mvvm,user-controls,C#,Wpf,Xaml,Mvvm,User Controls,我在MainWindowViewModel中有一个绑定的Usercontrol,当我在代码中更改它时,它不会在视图中更新 MainWindowView.xaml <Window x:Class="HataTracker.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.mi

我在MainWindowViewModel中有一个绑定的Usercontrol,当我在代码中更改它时,它不会在视图中更新

MainWindowView.xaml

<Window x:Class="HataTracker.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="648" Width="1152">

<Grid>
    <UserControl Content="{Binding ContentView}"/>
</Grid>
MainWindowViewModel.cs

public partial class MainWindowViewModel : BaseViewModel
{
    public UserControl ContentView { set; get; }

    public MainWindowViewModel()
    {
        ContentView = new SearchView();
    }
}
SearchView是一个用户控件 当我第一次运行该程序时,它工作正常,我在ContentView显示区域中获得了我的SearchView

问题是: 如果我将内容视图更改为其他视图,比如CreateView,我的SearchView将保留在屏幕上

如果我在MainWindowModelView构造函数中没有将值放入ContentView,它将保持为空

问题:
  • 如何交换绑定的Usercontrol并使更改反映在视图上

您的ViewModel不应包含UI元素,而应包含其他ViewModel。从您的ViewModel中删除
ContentView
属性。我已将UserControl ContentView替换为BaseViewModel类型,并且我有相同的问题,当在应用程序运行时更改视图模型时,我的MainWindowView(它的UserControl绑定到ContentView属性)没有更改在属性的setter中提升
NotifyPropertyChanged
public partial class MainWindowViewModel : BaseViewModel
{
    public UserControl ContentView { set; get; }

    public MainWindowViewModel()
    {
        ContentView = new SearchView();
    }
}