gpt4 book ai didi

wpf - 在屏幕之间切换 WPF

转载 作者:行者123 更新时间:2023-12-02 02:11:03 26 4
gpt4 key购买 nike

我是 WPF 的新手,我想看看人们在使用 MVVM Light Toolkit 的 WPF 应用程序中跨多个屏幕导航时推荐的最佳实践。作为 WPF 的新手,如果我的术语不正确,请原谅,因为我不确定正确的术语是“切换 View ”、“导航页面”、“更改窗口”还是其他东西(对这些术语的说明与WPF 将不胜感激)。

澄清一下我想做什么:我有一个应用程序,它有 3 个全屏页面/ View ,用户应该能够在其中来回移动。这些 View 永远不会同时显示,因此最容易将它们与选项卡控件中的选项卡进行比较;除了我不想要选项卡控件通常附带的选项卡条。相反,我想以编程方式在页面/ View 之间切换。

我在以下堆栈溢出答案中看到了几种不同的方法:

  1. https://stackoverflow.com/a/6114865/1081879
  2. How to navigate through windows with MVVM Light for WPF?

所以我真的只是想知道以上哪一种方法是我应该前进的方向?我实际上已经实现了第一个答案,但我不确定这样做是否是对数据模板的“滥用”/“黑客攻击”,或者这是否应该使用框架。

最后,如果其他工具包提供开箱即用的功能,MVVM Light 可能不是我可以使用的最合适的工具包。谁能阐明这个概念,并可能推荐一个更合适的工具包?

谢谢,

最佳答案

一个快速而肮脏的导航示例(这是在这里写的,而不是在 VS 中,所以如果拼写错误请应用修复程序):

让我们创建 View 的分层描述:

  public abstract Class ViewModelBase : INotifyPropertyChanged{} 
public abstract Class ViewModelNavigationBase : ViewModelBase {}
public Class ViewModel1 : ViewModelNavigationBase {}
public Class ViewModel2 : ViewModelNavigationBase {}
public Class ViewModel3 : ViewModelNavigationBase {}

public Class MainViewModel : ViewModelBase
{
private ViewModelNavigationBase currentViewModel;
public ViewModelNavigationBase CurrentViewModel
{
get{return currentViewModel;}
set
{
currentViewModel = value;
OnPropertyChanged("CurrentViewModel");
}
}

private const int numberOfPages = 3 ;
private int index;
private ViewModelNavigationBase[numberOfPages] pages;
....
... OnNavigateCommand()
{
index++;
index = index % numberOfPages;
CurrentViewModel = pages[index];
}

}

资源:

     <local:MainViewModel x:Key="MainVm" /> 

<DataTemplate TargetType={x:Type local:ViewModel1}>
<local:View1 />
</DataTemplate>

<DataTemplate TargetType={x:Type local:ViewModel2}>
<local:View2 />
</DataTemplate>

<DataTemplate TargetType={x:Type local:ViewModel3}>
<local:View3 />
</DataTemplate>

xaml:

 <Window x:Name="MainWindow" 
DataContext={StaticResource MainVm}>
<StackPanel>
<ContentControl Content={Binding CurrentViewModel} />
<Button Content="Navigate" Command="{Binding NavigateCommand}"/>
</StackPanel>
</Window>

关于wpf - 在屏幕之间切换 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12862155/

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