Я не могу понять, как это сделать, и можно было бы подумать, что это будет довольно просто.Изменить заголовок MenuItem и значок на основе привязки свойств viewmodel
У меня есть MenuItem
, который является частью ContextMenu
. У меня есть binding
для логического свойства на viewmodel. В зависимости от состояния этого свойства, я хочу, чтобы текст заголовка MenuItem
изменился.
Для этого я мог бы использовать IValueConverter
, но я уверен, что есть более элегантное решение с использованием DataTemplate
и триггеров. Я просто не могу понять правильную разметку.
Код, который я обработал (обрезал внизу), имеет две проблемы: один из HeaderTemplate
не содержит значок, так что будет в тексте MenuItems
(как правило, значок появляется в левая часть - см. изображение и сравните с элементами меню «Копировать» и «Очистить»). Кроме того, нажатие на MenuItem
не вызывает изменений DataTemplate
(обратите внимание, что команда работает, привязка к viewmodel фактически переключает состояние true/false).
<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>
Если вы хотите проголосовать, просим дать вам повод. –
Im не downvoter, но некоторые фрагменты могут помочь – lokusking
Я предполагаю, что я ищу общий пример шаблона данных, который может выполнять запрошенную функцию (т. Е. Шаблон элемента меню, который изменяет значок и заголовок на основе свойства модели). –