2012-06-26 86 views
0

我有一個列表框中有幾個項目。該項目可在3個狀態:WPF。禁用/啓用列表框項目ContextMenu和MVVM

  • 未連接
  • 連接
  • 活動

我需要在其中的每一項分配一個上下文菜單。實際上,我想要爲每個列表框項目重複使用一個菜單項列表,並且希望根據其狀態禁用/啓用菜單項。我正在使用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 {...})。這是一個好方法,還是我在這裏做的事情很錯?

感謝

回答

1

我認爲這是一個UI邏輯,你不應該在XAML寫..我會suugest你可以有哪些被綁定到列表框項目的類,這個類將有一個狀態對象或屬性,它將保持上下文菜單的啓用/禁用邏輯。您可以將此proeprty綁定到上下文菜單。