2012-06-26 4 views
0

여러 항목이 포함 된 목록 상자가 있습니다. 이 항목은 3 주에있을 수 있습니다 :WPF. ListBox 항목 사용/사용 안 함 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 로직이며, 당신은 내가 당신이 상자 항목을 나열 바인더 제본됩니다 클래스를 가질 수 suugest 것입니다 .. XAML에서 그것을 쓰지해야하며,이 클래스는 상태 개체가되거나 컨텍스트 메뉴의 활성화/비활성화 논리를 유지하는 속성 이 proeprty를 컨텍스트 메뉴에 바인딩 할 수 있습니다.