C# ICommand DependencyProperty属性更改回调
在自定义控件中,每当调用我的C# ICommand DependencyProperty属性更改回调,c#,wpf,xaml,C#,Wpf,Xaml,在自定义控件中,每当调用我的ICommand依赖项属性时,我都试图调用一个方法(即PropertyChangedCallback) 我使用PropertyChangedCallback方法具有以下依赖属性 public static readonly DependencyProperty ActiveOutput1Property = DependencyProperty.Register("ActiveOutput1", typeof(ICommand),
ICommand
依赖项属性时,我都试图调用一个方法(即PropertyChangedCallback)
我使用PropertyChangedCallback方法具有以下依赖属性
public static readonly DependencyProperty ActiveOutput1Property =
DependencyProperty.Register("ActiveOutput1", typeof(ICommand),
typeof(CustomAxis_IO),
new PropertyMetadata((ICommand)null,
new PropertyChangedCallback(OnOutput1Changed)
));
private static void OnOutput1Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
;
}
我在这里的控件中实现了这个依赖属性
<Button Command="{Binding RelativeSource={RelativeSource TemplatedParent},Path=ActiveOutput1}"/>
每次按下按钮时,它都会调用绑定到ActivateOutput1
依赖项属性的ICommand
属性。所以我知道这是可行的。但是,我的PropertyChangedCallback,OnOutput1Changed
,仅在应用程序启动时调用。每次调用我的ICommand
依赖属性(ActivateOutput1
)时,如何获取回调 正如我(以及其他一些人)在评论中所说,只有在修改DependencyProperty的值时才会调用PropertyChangedCallback。当您调用ICommand时,您只是在调用它。因此,不会调用PropertyChangedCallback。您可以尝试创建自己的ICommand实现。大概是这样的:
public class CallbackAfterExecutionCommand : ICommand
{
private Action<IMyView> _callback;
// You can set this property on the PropertyChangedCallback class
public IMyView View
{
get;
set;
}
public CallbackAfterExecutionCommand(Action<IMyView> callback)
{
_callback = callback;
}
public bool CanExecute(object parameter)
{
// If you want, you can implement something here
return true;
}
public void Execute(object parameter)
{
try
{
// Do whatever you want here. But you can also pass the execution
// logic through a parameter on the constructor
_callback(View);
}
catch (Exception ex)
{
throw ex;
}
}
}
public类CallbackAfterExecutionCommand:ICommand
{
私人行动;
//您可以在PropertyChangedCallback类上设置此属性
公共IMyView视图
{
得到;
设置
}
公共CallbackAfterExecutionCommand(操作回调)
{
_回调=回调;
}
公共布尔CanExecute(对象参数)
{
//如果你愿意,你可以在这里实现一些东西
返回true;
}
public void Execute(对象参数)
{
尝试
{
//你想干什么就干什么,但你也可以通过死刑
//通过构造函数上的参数执行逻辑
_回调(视图);
}
捕获(例外情况除外)
{
掷骰子;
}
}
}
正如我(以及其他一些人)在评论中所说,只有在修改DependencyProperty的值时才会调用PropertyChangedCallback。当您调用ICommand时,您只是在调用它。因此,不会调用PropertyChangedCallback。您可以尝试创建自己的ICommand实现。大概是这样的:
public class CallbackAfterExecutionCommand : ICommand
{
private Action<IMyView> _callback;
// You can set this property on the PropertyChangedCallback class
public IMyView View
{
get;
set;
}
public CallbackAfterExecutionCommand(Action<IMyView> callback)
{
_callback = callback;
}
public bool CanExecute(object parameter)
{
// If you want, you can implement something here
return true;
}
public void Execute(object parameter)
{
try
{
// Do whatever you want here. But you can also pass the execution
// logic through a parameter on the constructor
_callback(View);
}
catch (Exception ex)
{
throw ex;
}
}
}
public类CallbackAfterExecutionCommand:ICommand
{
私人行动;
//您可以在PropertyChangedCallback类上设置此属性
公共IMyView视图
{
得到;
设置
}
公共CallbackAfterExecutionCommand(操作回调)
{
_回调=回调;
}
公共布尔CanExecute(对象参数)
{
//如果你愿意,你可以在这里实现一些东西
返回true;
}
public void Execute(对象参数)
{
尝试
{
//你想干什么就干什么,但你也可以通过死刑
//通过构造函数上的参数执行逻辑
_回调(视图);
}
捕获(例外情况除外)
{
掷骰子;
}
}
}
如果您了解您要实现的目标,则在单击按钮并完成命令执行操作后,您将尝试运行一些逻辑
简单解 因为它是您的自定义控件,所以您可以自由使用事件。以下是步骤:
络合溶液 创建自己的抽象基本命令实现。一般来说,在这个实现中,您将有一些抽象方法在任何派生类中重写,以及一些将在关键位置触发的事件 这个解决方案需要更多的解释,因此,如果简单的解决方案不适合您,请分享它,我将澄清复杂的解决方案
快乐编码!:) 如果您了解您想要实现的目标,那么在单击按钮并完成命令执行操作后,您将尝试运行一些逻辑
简单解 因为它是您的自定义控件,所以您可以自由使用事件。以下是步骤:
络合溶液 创建自己的抽象基本命令实现。一般来说,在这个实现中,您将有一些抽象方法在任何派生类中重写,以及一些将在关键位置触发的事件。