0

いくつかのアイテムを含むリストボックスがあります。このアイテムは次の 3 つの状態にある可能性があります。

  • 接続されていません
  • 接続済み
  • アクティブ

これらの各項目にコンテキスト メニューを割り当てる必要があります。実際には、リストボックス項目ごとに再利用するメニュー項目の 1 つのリストが必要であり、その状態に応じてメニュー項目を無効/有効にしたいと考えています。私は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 {...})。これは良いアプローチですか、それともここで非常に間違ったことをしていますか?

ありがとう

4

1 に答える 1

1

これは UI ロジックであり、XAML で記述すべきではないと思います。リスト ボックス項目にバインドされるクラスを持つことができ、このクラスには、有効化/無効化ロジックを維持する状態オブジェクトまたはプロパティがあることをお勧めします。コンテキストメニュー用。このプロパティをコンテキスト メニューにバインドできます。

于 2012-06-26T06:07:27.247 に答える