2012-06-26 10 views
0

У меня есть список с несколькими элементами. Это элементы могут быть в 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 {...}). Является ли это хорошим подходом или я делаю что-то очень не так?

Благодаря

ответ

1

Я думаю, что это логика UI, и вы не должны писать в XAML .. Я бы suugest вы можете иметь класс, который получает привязываться к списку элементов коробки и этот класс будет иметь государственный объект или свойство, которое будет поддерживать логику включения/выключения для контекстного меню. Вы можете привязать этот proeprty к контекстному меню.

Смежные вопросы