C# modelview中的WPF更改控制

C# modelview中的WPF更改控制,c#,.net,wpf,C#,.net,Wpf,我创建了一个类似于的解决方案。但我不得不改变一些事情 例如,我创建了一个简单的登录命令。这很好用。我创建了一个绑定到登录命令的按钮 public RelayCommand LoginCommand { get { return new RelayCommand(Login); } } public void Login(object o) { if (Membership.ValidateUser

我创建了一个类似于的解决方案。但我不得不改变一些事情

例如,我创建了一个简单的登录命令。这很好用。我创建了一个绑定到登录命令的按钮

    public RelayCommand LoginCommand {
        get {
            return new RelayCommand(Login);
        }
    }


    public void Login(object o) {
        if (Membership.ValidateUser(Username, Password)) {
            ErrorVisible = Visibility.Hidden;
        } else {
            ErrorVisible = Visibility.Visible;
        }
    }
我测试了这个,效果很好。但是,当登录成功时,我希望将用户控件更改为其他控件。但我不知道怎么做。如何在视图模型中更改ContentControl内容?因此,实际上,将当前登录控件替换为另一个控件。

您可以像往常一样绑定:

<ContentControl Content="{Binding Path=PropertyWithUI}"/>
但这不是最好的方法,最好将两个控件都放在窗口上,并将它们的可见性属性绑定到VM中的属性

编辑

以下是一个例子:

在XAML中,我有一个内容控件和一个按钮:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <ContentControl Grid.Row="0" Content="{Binding Path=Control}"></ContentControl>
    <Button Grid.Row="1" Height="40" Click="Button_Click">Change control</Button>
</Grid>
和其他窗口代码。我创建了th VM的一个实例,并用一个新的文本框初始化控件属性

    readonly MyMVVM mvvm = new MyMVVM();
    public MainWindow()
    {
        InitializeComponent();

        DataContext = mvvm;
        mvvm.Control = new TextBox() {Text = "this is a text box"};
    }
当用户单击时,我将控件更改为其他

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var wb = new WebBrowser();
        mvvm.Control = wb;
        wb.Navigate("http://stackoverflow.com");
    }

您可以在主页中尝试:)创建新的WPF项目并将代码放在上面。

您可以在网格中覆盖这两个控件,并从视图模型中切换每个控件的可见性。但这是为了加载另一个用户控件吗?我的目标是用另一个控件替换控件。因此,当有人登录时:替换内容。
    readonly MyMVVM mvvm = new MyMVVM();
    public MainWindow()
    {
        InitializeComponent();

        DataContext = mvvm;
        mvvm.Control = new TextBox() {Text = "this is a text box"};
    }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var wb = new WebBrowser();
        mvvm.Control = wb;
        wb.Navigate("http://stackoverflow.com");
    }