我有一个样式,它应该有一个 MouseBinding 作为在我的 ViewModel 中执行命令的 InputBinding。
为此,我使用了 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 中的我的 Root 元素是从 UserControl 派生的自定义类。根元素的名称是
父母. 在以前的项目中,我也使用了这个并且一切正常。但是现在我有一个奇怪的错误,一个名为“Value is null”的参数。如果我在 AttachdProperty 中设置断点,我可以看到它包含命令并且恰好是 AttachedProperty 设置的 2 倍。之后我没有 Stacktrace 没有 Innerexception 什么都没有......只是任何值为空的消息。
如果我在 Binding 中使用 RelativeSource 没有错误,但找不到命令。我真的不知道出了什么问题。