1

私はそれを次のようItemsControlにしDataTemplateています:

ここに画像の説明を入力してください

ユーザーがアイテムをクリックしたときに効果を発揮したいのですが、垂直方向に展開され、より多くの情報が表示されます。

私が考えている唯一の方法は、これを変更して、選択された通常のビュー用にListBox2を作成することです。DataTemplates

Gridただし、VMのクリックとフリップのプロパティを登録して、このボックスを展開したいと思います。GridユーザーがMVVMの方法をクリックしたときに登録する方法はありますか?

4

2 に答える 2

1

イベントに添付された動作を使用できますMouseDown
次の質問を参照してください。WPF/MVVM-ViewModelでTreeViewItemsのダブルクリックを処理する方法は?

あなたの場合、それはこのようになります

<ItemsControl ItemsSource="{Binding ...}">
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="commandBehaviors:MouseDown.Command"
                    Value="{Binding YourItemClickCommand}"/>
            <Setter Property="commandBehaviors:MouseDown.CommandParameter"
                    Value="{Binding}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
    <!-- ... -->
</ItemsControl>

MouseDown

public class MouseDown
{
    public static DependencyProperty CommandProperty =
        DependencyProperty.RegisterAttached("Command",
                                            typeof(ICommand),
                                            typeof(MouseDown),
                                            new UIPropertyMetadata(CommandChanged));

    public static DependencyProperty CommandParameterProperty =
        DependencyProperty.RegisterAttached("CommandParameter",
                                            typeof(object),
                                            typeof(MouseDown),
                                            new UIPropertyMetadata(null));

    public static void SetCommand(DependencyObject target, ICommand value)
    {
        target.SetValue(CommandProperty, value);
    }

    public static void SetCommandParameter(DependencyObject target, object value)
    {
        target.SetValue(CommandParameterProperty, value);
    }
    public static object GetCommandParameter(DependencyObject target)
    {
        return target.GetValue(CommandParameterProperty);
    }

    private static void CommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
    {
        Control control = target as Control;
        if (control != null)
        {
            if ((e.NewValue != null) && (e.OldValue == null))
            {
                control.MouseDown += OnMouseDown;
            }
            else if ((e.NewValue == null) && (e.OldValue != null))
            {
                control.MouseDown -= OnMouseDown;
            }
        }
    }

    private static void OnMouseDown(object sender, RoutedEventArgs e)
    {
        Control control = sender as Control;
        ICommand command = (ICommand)control.GetValue(CommandProperty);
        object commandParameter = control.GetValue(CommandParameterProperty);
        command.Execute(commandParameter);
    }
}
于 2012-06-19T20:42:44.420 に答える
0

質問に正しく従っているかどうかはわかりませんが、探しているのはDataGrid RowDetails機能のようなものですか?選択したアイテムの詳細パネルが表示されます。

http://wpftutorial.net/DataGrid.html#rowDetails

于 2012-06-19T22:19:09.707 に答える