我有一个包含多个项目的列表框。这个项目可能处于3状态:
我需要为每个项目分配一个上下文菜单。实际上,我希望有一个菜单项列表可以重复用于每个列表框项目,我想根据状态禁用/启用菜单项。我正在使用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>
我正在考虑为ModelView中的每个菜单项添加一个属性,该属性将说明是否应启用相应的菜单项(例如,public bool ConnectEnabled {...}
)。这是一个好方法还是我在这里做错了什么?
由于
答案 0 :(得分:1)
我认为这是一个UI逻辑,你不应该在XAML中写它。我会觉得你可以有一个类被绑定到列表框项目,这个类将有一个状态对象或属性,将维持启用/禁用上下文菜单的逻辑。您可以将此proeprty绑定到上下文菜单。