【问题标题】:MVVM Light - Get Window instance to set icon after PropertyChangeMVVM Light - 在 PropertyChange 之后获取 Window 实例以设置图标
【发布时间】:2015-11-02 14:44:50
【问题描述】:

我想根据选中的复选框更改 .ico:

        <MenuItem Header="_Online" Command="{Binding SetStatusOnlineCommand}"  />
        <MenuItem Header="_Away" Command="{Binding SetStatusAwayCommand}" />
        <MenuItem Header="_Offline" Command="{Binding SetStatusOfflineCommand}" />

由于我使用的是 MVVM Light 并且它是 SimpleIoC,我不知道如何实现这一点。

我的 ViewModel 不知道它所代表的窗口,因此我无法更改窗口的图标。我的窗口通过本地程序在 XAML 中获取 DataContext:

<DockPanel x:Name="MainPanel"  DataContext="{Binding MainViewModel, Source={StaticResource Locator}}">

我想在我的 ViewModel 中创建一个 PropertyChangeEvent。 Window 注册到此事件,但由于我通过 XAML 中的 Locator 实例化,我无法从我的 Window 访问它,还是我错了?!

我可以使用 OnChange-Events ...但我会打破 MVVM 模式。有没有人有一个好主意来实现这一点?!

【问题讨论】:

  • 看起来是发布-订阅者模式的完美用例:您的命令发送消息;您的 Windows 订阅此消息并采取相应措施。
  • 我将窗口的Icon 属性绑定到视图模型中的Status 属性,并使用转换器或数据触发器根据该属性的值选择适当的图标。

标签: wpf mvvm-light


【解决方案1】:

您可以将窗口作为命令参数传递:

<MenuItem Header="_Online" Command="{Binding SetStatusOnlineCommand}"
CommandParameter="{Binding ElementName=YourWindowName}" />

在此解释:https://stackoverflow.com/a/16195267/5147720

【讨论】:

  • 谢谢!完美运行!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 2016-12-26
  • 2011-12-23
相关资源
最近更新 更多