添加和删除具有其他参数的处理程序?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了添加和删除具有其他参数的处理程序?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1629字,纯文字阅读大概需要3分钟。
内容图文
![添加和删除具有其他参数的处理程序?](/upload/InfoBanner/zyjiaocheng/676/37589d185d6a4cf598c612a610b443bb.jpg)
在添加和删除事件处理程序时,如果您想拥有其他参数,该如何做呢?下面的代码就像我想要的东西,但显然不起作用.
您将如何处理? -我无法使用委托或lambda,这很麻烦,因为我还需要删除处理程序.
private static void IsDefaultChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
{
if ((bool)args.NewValue)
{
Window.Current.CoreWindow.KeyUp += CoreWindowOnKeyUp(dependencyObject);
}
else
{
Window.Current.CoreWindow.KeyUp -= CoreWindowOnKeyUp(dependencyObject);
}
}
private static void CoreWindowOnKeyUp(CoreWindow sender, KeyEventArgs args, DependencyObject dependencyObject)
{
((ICommand)dependencyObject.GetValue(Button.CommandProperty)).Execute(null);
}
解决方法:
您可以做的是:
>在IsDefaultChanged方法中保留要添加/删除的DependencyObjects的一些集合.
>修改您的CoreWindowOnKeyUp处理程序,使其仅接受预期的两个参数,并查询DependencyObjects本身的集合.绑定此事件一次,不要取消绑定.
即您将拥有一个具有单个处理程序的事件,该事件将查询当前依赖项对象的集合,而不是为每个当前依赖项对象提供一个带有处理程序的事件.
HashTable<DependencyObject> current = new HashTable<DependencyObject>();
// Bound as before
private static void IsDefaultChanged(
DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs args)
{
if ((bool)args.NewValue)
current.Add(dependencyObject);
else
current.Remove(dependencyObject);
}
// Permanently bound, once.
private static void CoreWindowOnKeyUp(CoreWindow sender, KeyEventArgs args)
{
foreach(var do in current)
{
((ICommand)do.GetValue(Button.CommandProperty)).Execute(null);
}
}
或者,如果Richard的代码未正确解除绑定Lambda,则可以保留Dictionary< DependencyObject,EventHandler>.因此您可以检索绑定的确切lambda并相应地解除绑定.
内容总结
以上是互联网集市为您收集整理的添加和删除具有其他参数的处理程序?全部内容,希望文章能够帮你解决添加和删除具有其他参数的处理程序?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。