[英]WPF. Disable/Enable ListBox items ContextMenu & MVVM
我有一個包含多個項目的列表框。 該項目可能處於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 {...}
)。 這是一個好方法還是我在這里做錯了什么?
謝謝
我認為這是一個UI邏輯,您不應該用XAML編寫它。.我建議您可以有一個綁定到列表框項目的類,並且該類將具有狀態對象或屬性,該對象或屬性將維護啟用/禁用邏輯用於上下文菜單。 您可以將此屬性綁定到上下文菜單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.