C# 在WPF MVVM中的按钮单击命令上添加新的Usercontrol

C# 在WPF MVVM中的按钮单击命令上添加新的Usercontrol,c#,wpf,mvvm,C#,Wpf,Mvvm,嗨,我正在尝试动态显示usercontrol,但它不起作用…请帮助我改进代码。 在MainWindowViewModel的cunstructor中,我尝试设置contentcontrol的初始属性。 先谢谢你 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x

嗨,我正在尝试动态显示usercontrol,但它不起作用…请帮助我改进代码。 在MainWindowViewModel的cunstructor中,我尝试设置contentcontrol的初始属性。 先谢谢你

<Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:VM="clr-namespace:WpfApplication1.ViewModel"
            xmlns:View="clr-namespace:WpfApplication1.View"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <DataTemplate DataType="{x:Type VM:FirstControlViewModel}">
                <View:FirstControl></View:FirstControl>
            </DataTemplate>
            <DataTemplate DataType="{x:Type VM:SecondControlViewModel}">
                <View:SecondControl></View:SecondControl>
            </DataTemplate>

        </Window.Resources>
        <Grid>
            <ContentControl Content="{Binding LoadedControl}" />
        </Grid>
    </Window>
您需要将LoadedControl设置为ViewModel类型的实例,而不是字符串

public MainViewModel()
{
   LoadedControl = new FirstControlViewModel();
}

private ViewModelBase _LoadedControl;

public ViewModelBase LoadedControl
{
    get { return _LoadedControl; }
    set { _LoadedControl = value;
          NotifyPropertyChanged("LoadedControl");
    }
}

按钮在哪里?@hossein实际上按钮命令出现在使用RealyCommand实现的FirstControlViewModel上。但我的实际问题是,当我在cunstructor中设置属性时,它必须反映,谢谢,它可以工作,但我还有一个问题,你在我的XAML文件中注意到了,你的XAML文件中有什么问题?谢谢,它可以工作,但我在我的XAML文件中还有一个问题,你注意到了,如果我使它成为ViewModelBase,它就不适用于SecondUserControl视图模式FirstControlViewModel和SecondControlViewModel都必须从ViewModelBase继承。你的XAML看起来不错。你必须说问题出在哪里。。。
public MainViewModel()
{
   LoadedControl = new FirstControlViewModel();
}

private ViewModelBase _LoadedControl;

public ViewModelBase LoadedControl
{
    get { return _LoadedControl; }
    set { _LoadedControl = value;
          NotifyPropertyChanged("LoadedControl");
    }
}