У меня есть список с несколькими элементами. Это элементы могут быть в 3 состояния:WPF. Отключить/Включить элементы ListBox ContextMenu & MVVM
- Не подключен
- Connected
- Активный
мне нужно назначить на каждый из этих пунктов в контекстное меню. На самом деле, я хочу иметь один список элементов меню для повторного использования для каждого элемента списка, и я хочу отключить/включить пункты меню в соответствии с их состоянием. Я использую MVVM. Я хотел знать, что лучше всего подходит для достижения моей цели?
<DataTemplate x:Key="TemplateSelector">
<ContentPresenter Content="{Binding}" Name="contentPresenter">
<telerik:RadContextMenu.ContextMenu>
<telerik:RadContextMenu>
<telerik:RadMenuItem Header="Connect" Style="{StaticResource ResourceKey=ContextMenuStyle}" />
<telerik:RadMenuItem Header="Disconnect" />
<telerik:RadMenuItem Header="Delete Database" />
</telerik:RadContextMenu>
</telerik:RadContextMenu.ContextMenu>
</ContentPresenter>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=ConnectionType}" Value="Disconnected">
<Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource OfflineDeviceItemTemlpate}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ConnectionType}" Value="Internet">
<Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource OnlineDeviceItemTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ConnectionType}" Value="Wifi">
<Setter TargetName="contentPresenter" Property="ContentTemplate" Value="{StaticResource OnlineDeviceItemTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</UserControl.Resources>
<Grid>
<telerik:RadListBox x:Name="lsbDevices" ItemsSource="{Binding Path=Devices}" ItemTemplate="{StaticResource TemplateSelector}"
SelectedItem="{Binding SelectedDevice, Mode=TwoWay}" Grid.Row="0" />
</Grid>
Я думаю, добавив свойство для каждого пункта меню в видовую, который будет состояние, если соответствующий пункт меню должен быть включен или нет (например, публичный bool ConnectEnabled {...}
). Является ли это хорошим подходом или я делаю что-то очень не так?
Благодаря