gpt4 book ai didi

c# - WPF 从用户控制 MVVM 更改 View

转载 作者:行者123 更新时间:2023-11-30 16:57:01 26 4
gpt4 key购买 nike

我试图在没有任何侧面板的情况下从一个 View Model 导航到另一个。

例如,我有一个主窗口 View ,这是我加载用户控件的地方。

我试图从 MainViewModel 访问静态实例以更改 View ,但它不起作用。

MainWindow.xaml

<Window.Resources>

<DataTemplate DataType="{x:Type vm:FirstViewModel}">
<v:FirstView/>
</DataTemplate>

<DataTemplate DataType="{x:Type vm:SecondViewModel}">
<v:SecondView/>
</DataTemplate>

</Window.Resources>
<ContentControl Content="{Binding CurrentViewModel}"/>

MainViewModel.cs

class MainviewModel : ObservableObject
{
private ObservableObject _currentViewModel = new FirstViewModel();
public ObservableObject CurrentViewModel
{
get { return _currentViewModel; }
set
{
_currentViewModel = value;
RaisePropertyChangedEvent("CurrentViewModel");
}
}

private static MainViewModel _instance = new MainViewModel();
public static MainViewModel Instance { get { return _instance; } }
}

在这里,我有我的FirstView,它只包含一个按钮和其他几个 UI 设计

FirstView.xaml

<Button Command="{Binding goToSecondView}" />

FirstViewModel.cs

class FirstViewModel : ObservableObject
{
public ICommand goToSecondView
{
get
{
return new DelegateCommand(() =>
{
MainViewModel.Instance.CurrentViewModel = new SecondViewModel();
});
}
}
}

我有一个 SecondView,它类似于 FirstView,只是它导航到 FirstView

我曾尝试寻找解决方案,但到目前为止,我只能设法找到在面板上显示按钮的示例,然后允许通过单击这些按钮来切换用户控件

我想要实现的是通过 User Control 本身的按钮启用 User Control 的切换,而无需任何侧面板。

非常感谢任何帮助,并且肯定会在我 future 的项目中帮助我。

谢谢。

最佳答案

您正在创建 MainViewModel 的两个不同实例。第一个可能是由定位器或其他东西创建的,它是您的 View 在首次创建窗口时绑定(bind)到的那个。然后它创建第二个实例并将其分配给它自己的静态实例成员:

private static MainViewModel _instance = new MainViewModel();
public static MainViewModel Instance { get { return _instance; } }

正是在这个实例中,当您按下按钮时,您的 ICommand 处理程序正在更改,该按钮未绑定(bind)到任何内容。一般来说,您应该使用依赖注入(inject)框架来确保它是一个真正的单例,但现在只需执行以下操作:

    public MainViewModel()
{
Instance = this;
}

public static MainViewModel Instance { get; private set; }

您的代码还调用了 RaisePropertyChangedEvent("CurrentViewModel")...我很确定您的意思是 RaisePropertyChanged("CurrentViewModel")。

关于c# - WPF 从用户控制 MVVM 更改 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com