【问题标题】:Getting access to StatusBar from pages in navigation workflow从导航工作流中的页面访问状态栏
【发布时间】:2014-12-31 16:08:19
【问题描述】:

我有一个 WPF 应用程序,可以在几个页面之间提供导航。 MainWindow 是包含一个Frame 对象的Window 对象。然后我有几个 Page 对象。我需要实现一个状态栏,其中一些文本将根据用户在特定页面上采取的操作进行更新(在 TextBlock 中)。

  1. 我的 StatusBar 应该在 MainWindow 中声明还是有更好的地方?
  2. 如何从不同的页面访问 StatusBar 中的 TextBlock?

【问题讨论】:

    标签: c# wpf xaml .net-4.0


    【解决方案1】:

    通常对我有用的是 pub-sub 或 依赖注入:

    首先,您可能会为状态栏提供自己的视图模型。这将组成您的应用程序的外壳视图,可能是您的 MainWindow。我通常有一个外壳视图模型,包括一个工具栏或功能区、一个状态栏,以及一个 IShellContent 容器,占用剩余空间。所以,为了回答你的第一个问题,我会在它自己的视图中声明它,给它自己的视图模型并将它组合到你的 MainWindow 中。

    第二个问题可以用不同的方式解决:

    要么给你的状态栏视图模型一个界面,例如IStatusBar,并配置您的依赖注入容器以将视图模型绑定为单例。每个需要输出状态消息的视图模型都可以通过构造函数注入来使用它,如下所示:

    public MyViewModel(IStatusBar statusBar)
    {
        this.statusBar = statusBar;
        statusBar.ShowMessage("Creating new MyViewModel...");
    }
    

    或者您可以使用当今许多 MVVM 框架附带的消息总线基础架构。您的状态栏视图模型将订阅 StatusMessage,并且每当需要发布状态消息时,它都会创建一个新的 StatusMessage 并发布它,如下所示:

    public MyViewModel(IMessageBus bus)
    {
        this.bus = bus;  
        bus.Publish(new StatusMessage("Text"));
    }
    

    我会选择第一个解决方案(依赖注入),因为它更容易测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多