【问题标题】:WPF Prism simple app with two views具有两个视图的 WPF Prism 简单应用程序
【发布时间】:2014-07-22 21:34:22
【问题描述】:

我是初学者,我有一个非常简单的 WPF 应用程序,有两个视图...(我现在使用后面的代码...)

我需要与 this tutorial 相同的东西,但使用 Prism 而不是 mvvm light...我需要改变什么?

我设法使用命令,但我不知道如何切换视图...(Prism 中不存在 ViewModelBase)我需要从第一个视图的 ViewModel 中的命令更改视图。

我只找到困难的 Prism“入门”教程...我正在寻找一个非常简单的示例...

【问题讨论】:

  • 这里有一个使用 Prism 和 MOQ 的非常简单但完整的应用程序。 wpfpasswordgeneratorprismoq.codeplex.com 它旨在作为一个参考应用程序,供想要一个简单但有用的起点的人使用。

标签: wpf mvvm prism


【解决方案1】:

简单示例 ;) 你检查过这个吗? http://msdn.microsoft.com/en-us/library/gg406140.aspx 读起来很长,但信息量很大。最新版本的 Prism 引入了 BindableBase,它使用 SetProperty(ref _propName, value) 类型语法,这使得 INotifyProperty Change 的考验更加清晰。

清单 16:使用 WPF 的 PRISM 库的代码示例应该为您提供所需的简单示例。他们在 5.0 中添加了比之前股票交易者应用程序更多的示例。

您可以像这样查看第一个区域导航。

     <Button Content="Steady State Projects"  
        Style="{StaticResource NavButton}"
        Command="{x:Static infCommands:ApplicationCommands.NavigateCommand}" 
        CommandParameter="{x:Type views:Projects }" MaxHeight="75"/>

  public class ApplicationCommands
  {
    public static CompositeCommand NavigateCommand = new CompositeCommand();
  }

  public class ShellViewModel
  {
    private readonly IRegionManager _regionManager;

    public DelegateCommand<object> NavigateCommand { get; private set; }

    public ShellViewModel(IRegionManager regionManager)
    {
        _regionManager = regionManager;
        NavigateCommand = new DelegateCommand<object>(Navigate);
        ApplicationCommands.NavigateCommand.RegisterCommand(NavigateCommand);
    }

    /// <summary>Navigates using the view path, with the regions</summary>
    /// <param name="navigatePath"></param>
    private void Navigate(object navigatePath)
    {
        if (navigatePath != null)
        {
            _regionManager.RequestNavigate(RegionNames.ContentRegion, navigatePath.ToString(), NavigationComplete);
        }
    }

    /// <summary>Callback activates on navigation completed.</summary>
    /// <param name="result"></param>
    private void NavigationComplete(NavigationResult result)
    {
        // MessageBox.Show(result.Context.Uri.ToString());
    }
 }

【讨论】:

  • 谢谢!但是,如何使用“NavigateCommand”如何设置“navigatePath”?我必须从教程的第二部分获取项目,有一个区域(不需要工具栏),添加第二个 UserControl 并从第一个导航到第二个?
  • 抱歉,我抓取了一个正在打开窗口的按钮的内容。我已经编辑了我的答案,所以查看Xaml,可以看到该命令调用了静态导航命令,而按钮的命令参数是我当前所在的View...区域管理器将导航到新视图...您可以在模块级别的视图之间使用区域导航,也可以在应用程序级别使用它在视图之间导航。我知道获得第一个简单的导航设置是多么疯狂,如果您需要更多详细信息,请告诉我。
  • 再次感谢您的帮助,是的,开始使用 Prism 有点困难……我会试试的。
猜你喜欢
  • 1970-01-01
  • 2016-06-20
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多