C# WPF。禁用/启用列表框项目上下文菜单&;MVVM

C# WPF。禁用/启用列表框项目上下文菜单&;MVVM,c#,.net,wpf,mvvm,contextmenu,C#,.net,Wpf,Mvvm,Contextmenu,我有一个包含几个项目的列表框。此项可能处于3种状态: 不相连 连接的 活跃的 我需要为每个项目分配一个上下文菜单。实际上,我想要一个菜单项列表,以便为每个listbox项重用,并且我想要根据菜单项的状态禁用/启用菜单项。我正在使用MVVM。 我想知道实现目标的最佳实践是什么 <DataTemplate x:Key="TemplateSelector"> <ContentPresenter Content="{Binding}" Name="conte

我有一个包含几个项目的列表框。此项可能处于3种状态:

  • 不相连
  • 连接的
  • 活跃的
我需要为每个项目分配一个上下文菜单。实际上,我想要一个菜单项列表,以便为每个listbox项重用,并且我想要根据菜单项的状态禁用/启用菜单项。我正在使用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{…}
)。这是个好方法还是我做错了什么


谢谢

我认为这是一个UI逻辑,不应该用XAML编写。。我想你可以有一个绑定到列表框项目的类,这个类将有一个状态对象或属性,它将维护上下文菜单的启用/禁用逻辑。您可以将此项目绑定到关联菜单