如何绑定到UIElement
本文关键字:UIElement 绑定 何绑定 | 更新日期: 2023-09-27 18:37:19
我正在尝试将父Window
传递给命令,以便它可以用于RoutedCommand
。有什么办法可以用Dependency Properties
做到这一点吗?我看到很多问题说这是不可能的,因为它不是可视化树的一部分,但以下工作:
<Button CommandParameter="{Binding ElementName=Main}" .../>
该参数实际上设置为 Main
(父窗口)。那么,如何在带有Dependency Property
的自定义对象上执行此操作?
当我尝试在自己的对象 DP 上设置它时出现错误:
System.Windows.Data 错误:2:找不到目标元素的管理框架元素或框架内容元素。绑定表达式:(无路径);数据项=空;目标元素是"命令组"(哈希代码=25702951);目标属性是"命令参数"(类型"对象")
我的班级如下:
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}>
...
由于 CommandParameter 不是可视或逻辑树元素,因此它不能继承 DataContext。
。但是当你的对象被Freezable
时,它可以继承数据上下文。
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/