我正在尝试将父Window
传递给命令,以便它可以用于RoutedCommand
。有没有办法用Dependency Properties
执行此操作?我看过很多问题,说这是不可能的,因为它不是视觉树的一部分,但下面的工作:
<Button CommandParameter="{Binding ElementName=Main}" .../>
该参数实际上设置为Main
(父窗口)。那么,我如何使用Dependency Property
?
当我尝试在我自己的对象DP上设置它时出现的错误:
System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。 BindingExpression :(没有路径);的DataItem = NULL; target元素是'CommandGroup'(HashCode = 25702951); target属性是'CommandParameter'(类型'Object')
我的课程如下:
public class CommandGroup : DependencyObject, ICommand
{
public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.Register("CommandParameter", typeof (object), typeof (CommandGroup));
public object CommandParameter
{
get { return (object)GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
}
....
}
我想将XAML设置如下:
<Button>
<Button.Command>
<CommandGroup CommandParameter={Binding ElementName=Main}>
...
答案 0 :(得分:0)
由于CommandParameter不是视觉或逻辑树元素,因此它不能继承DataContext。
...但是当您的对象是Freezable
时,它可以继承DataContext。
public class CommandGroup : Freezable, ICommand
{
public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.Register("CommandParameter", typeof (object), typeof (CommandGroup));
public object CommandParameter
{
get { return (object)GetValue(CommandParameterProperty); }
set { SetValue(CommandParameterProperty, value); }
}
protected override Freezable CreateInstanceCore()
{
return new CommandGroup();
}
}
请参阅: https://thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/