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>