0

ViewModel でコマンドを実行する InputBinding として MouseBinding を持つ必要がある Style があります。

これを行うには、AttachedProperty を使用しています。

public static readonly DependencyProperty InputBindingsProperty =
    DependencyProperty.RegisterAttached("InputBindings", typeof(InputBindingCollection),
    typeof(InputBindingAttached), 
    new FrameworkPropertyMetadata(new InputBindingCollection(),
    (s, e) =>
    {
        UIElement element = s as UIElement;
        if (element == null || !(e.NewValue is InputBindingCollection))
            return;

        element.InputBindings.Clear();
        element.InputBindings.AddRange(e.NewValue as InputBindingCollection);
    }));

public static void SetInputBindings(UIElement element, InputBindingCollection inputbindings)
{
    element.SetValue(InputBindingsProperty, inputbindings);
}

public static InputBindingCollection GetInputBindings(UIElement element)
{
    return (InputBindingCollection)element.GetValue(InputBindingsProperty);
}

そして、これは私の XAML です:

<dc:ColumnDefinition Header="Mapper" BindingMemberPath="Mapper" Width="*">
    <dc:ColumnDefinition.CellStyle>
        <Style TargetType="{x:Type dc:AdvGridCell}">
            <Setter Property="Attached:InputBindingAttached.InputBindings">
                <Setter.Value>
                    <InputBindingCollection>
                        <MouseBinding Gesture="LeftDoubleClick" 
                                      Command="{Binding Path=DataContext.EditMapperCommand, ElementName=parent}"/>
                    </InputBindingCollection>
                </Setter.Value>
            </Setter>
        </Style>
    </dc:ColumnDefinition.CellStyle>
</dc:ColumnDefinition>

XAML のルート要素は、UserControl から派生したカスタム クラスです。ルート要素の名前は

. 以前のプロジェクトでもこれを正確に使用し、すべて正常に機能しました。しかし、「Value is null」という名前のパラメーターという奇妙なエラーが発生しました。AttachdProperty にブレークポイントを設定すると、コマンドが含まれており、AttachedProperty が正確に 2 回設定されていることがわかります。その後、StacktraceもInnerexceptionも何もありません...値がnullであるというメッセージだけです。

Binding で RelativeSource を使用すると、エラーは発生しませんが、コマンドが見つかりません。何が悪いのか本当にわかりません。

4

0 に答える 0