Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf MVVM Light-获取窗口实例以在PropertyChange之后设置图标_Wpf_Mvvm Light - Fatal编程技术网

Wpf MVVM Light-获取窗口实例以在PropertyChange之后设置图标

Wpf MVVM Light-获取窗口实例以在PropertyChange之后设置图标,wpf,mvvm-light,Wpf,Mvvm Light,我想根据选中的复选框更改.ico: <MenuItem Header="_Online" Command="{Binding SetStatusOnlineCommand}" /> <MenuItem Header="_Away" Command="{Binding SetStatusAwayCommand}" /> <MenuItem Header="_Offline" Command="{Binding SetS

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

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

因为我使用的是MVVM Light,而且它是SimpleIoC,所以我不知道如何实现这一点

我的ViewModel不知道它所代表的窗口,因此我无法更改窗口的图标。我的窗口通过localter获取XAML中的it数据上下文:

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

我想在ViewModel中创建PropertyChangeEvent。窗口注册到此事件,但由于我是通过XAML中的定位器实例化的,所以我无法从窗口访问它,还是我错了


我可以用OnChange事件。。。但接下来我将打破MVVM模式。有人有好主意来实现这个吗

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

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


此处解释:

看起来是发布订户模式的完美用例:您的命令发送消息;您的Windows订阅此消息并相应地执行操作。我会将窗口的
图标
属性绑定到视图模型中的
状态
属性,并使用转换器或数据触发器根据该属性的值选择适当的图标。谢谢!工作完美!