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 を使用すると、エラーは発生しませんが、コマンドが見つかりません。何が悪いのか本当にわかりません。