Wpf 根据viewmodel属性绑定更改菜单项标题和图标

Wpf 根据viewmodel属性绑定更改菜单项标题和图标,wpf,datatemplate,menuitem,datatrigger,Wpf,Datatemplate,Menuitem,Datatrigger,我不知道怎么做,人们会认为这很简单 我有一个菜单项,它是上下文菜单的一部分。我将绑定到viewmodel上的布尔属性。根据此属性的状态,我希望更改MenuItem的标题文本和图标 我当然可以使用IValueConverter来实现这一点,但我确信有一个更优雅的解决方案使用DataTemplate和触发器。我就是想不出正确的标记 我编写的代码(下面剪掉)有两个问题:一个是标题模板似乎不包含图标,因此菜单项的文本也包含图标(通常图标出现在左侧部分-请参见图片并与复制和清除菜单项进行比较)。此外,单击

我不知道怎么做,人们会认为这很简单

我有一个
菜单项
,它是
上下文菜单
的一部分。我将
绑定到viewmodel上的布尔属性。根据此属性的状态,我希望更改
MenuItem
的标题文本和图标

我当然可以使用
IValueConverter
来实现这一点,但我确信有一个更优雅的解决方案使用
DataTemplate
和触发器。我就是想不出正确的标记

我编写的代码(下面剪掉)有两个问题:一个是
标题模板
似乎不包含图标,因此
菜单项
的文本也包含图标(通常图标出现在左侧部分-请参见图片并与复制和清除菜单项进行比较)。此外,单击
MenuItem
不会触发
DataTemplate
更改(请注意,该命令起作用,viewmodel绑定实际上会切换真/假状态)



你是说像这样?不要让事情变得更难;)


你是说像这样?不要让事情变得更难;)



如果你要否决投票,请给出一个原因。我不是否决投票人,但一些片段可能会有所帮助。我想我正在寻找一个datatemplate的通用示例,它可以执行请求的功能(即,一个menuitem模板,它根据模型属性更改图标和标题)。这不会发生,因为没有人知道你的代码,没有什么比一般的例子更好的了。这取决于您的XAML和ViewModel添加的当前代码和图像。提前感谢。如果你要否决投票,请给出一个原因。我不是否决投票人,但一些片段可能会有所帮助。我想我正在寻找一个datatemplate的通用示例,它可以执行请求的功能(即,一个menuitem模板,它根据模型属性更改图标和标题)。这不会发生,因为没有人知道你的代码,没有什么比一般的例子更好的了。这取决于您的XAML和ViewModel添加的当前代码和图像。提前谢谢。相信我,我不想让事情变得更难相信我,我不想让事情变得更困难。
   <ContextMenu>
            <MenuItem Command="{Binding Source={x:Static cmd:Commands.PauseCommand}}"
                      CommandParameter="{Binding}">
                <MenuItem.HeaderTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image x:Name="img" Source="../Icons/pause.png"/>
                            <TextBlock x:Name="txt" Text="Pause"/>
                        </StackPanel>
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding IsPaused}" Value="True" >
                                <Setter Property="Image.Source" Value="../Icons/play.png" TargetName="img"/>
                                <Setter Property="Text" Value="Play" TargetName="txt"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </MenuItem.HeaderTemplate>
            </MenuItem>
<ContextMenu>
                        <MenuItem Command="{Binding Source={x:Static cmd:Commands.PauseCommand}}"
                  CommandParameter="{Binding}">
                            <MenuItem.Style>
                                <Style TargetType="MenuItem">
                                    <Setter Property="Icon" Value="../Icons/play.png>"></Setter>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsPaused, Mode=OneWay}" Value="True">
                                            <Setter Property="Icon" Value="../Icons/pause.png"></Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </MenuItem.Style>
                        </MenuItem>
                    </ContextMenu>