wpf 如何从“内容”视图更改主视图

qncylg1j  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(174)

我有一个类似于

应用程序
整个窗口定义在MainWindow.xaml中,绿色部分是内容控件

<ContentControl Grid.Row="1"
   Grid.Column="1"
   Margin="5"
   Content="{Binding CurrentView}"/>

MainViewModel看起来像这样:

public RelayCommand HomeViewCommand { get; set; }
    public RelayCommand DetailsViewCommand { get; set; }

    public HomeViewModel HomeVm { get; set; }
    public DetailsViewModel DetailsVm { get; set; }
    private object _currentView;

    public object CurrentView
    {
        get { return _currentView; }
        set 
        {
            _currentView = value;
            OnPropertyChanged();    
        }
    }

    public MainViewModel()
    {
        HomeVm = new HomeViewModel();
        DetailsVm = new DetailsViewModel();
        CurrentView = HomeVm;

        HomeViewCommand = new RelayCommand(o =>
        {
            CurrentView = HomeVm;
        });
    }

MainView的当前和默认内容是HomeView,我已经在HomeView中实现了按下列表中的项目的事件触发器。我想知道,我应该在HomeView方法中写什么(在单击项目时触发),以便将MainView内容部分更改为另一个视图(在我的示例中为DetailsView)。

private void RaisePropertyChanged(string propertyName)
{
        var handler = PropertyChanged;

        if (handler != null)
        {
            //something here to change the currentView of the MainViewModel
        }
}
nhaq1z21

nhaq1z211#

从discord的人那里得到了答案server.https://discord.gg/AvnpSMDY
您可以将MainViewModel传递到另一个视图模型的构造函数中,并将其分配给一个私有只读字段,如_mainViewModel。这样,您就可以通过更改CurrentView属性来更改当前视图:

_mainViewModel.CurrentView = _mainViewModel.DetailsVm;

或执行命令:

_mainViewModel.DetailsViewCommand.Execute(null);

相关问题