将命令绑定到自定义事件处理程序

本文关键字:事件处理 程序 自定义 命令 绑定 | 更新日期: 2023-09-27 18:04:33

我正在尝试创建一个datapager用户控件。这个用户控件在其代码后面声明了一个事件:

public event EventHandler OnPageIndexPagerChanged;

我在主用户控件中使用这个控件,并将我的事件绑定到后面代码中的另一个事件,如下所示:

xaml:

OnPageIndexPagerChanged="SuperDataPager_OnPageIndexPagerChanged"

c#(后面的代码):

private void SuperDataPager_OnPageIndexPagerChanged(object sender, EventArgs e)
        {
            var viewModel = DataContext as ViewSchedeConsuntiviViewModel;
            if (viewModel != null)
            {
                viewModel.FilterCommand.Execute(sender);
            }
        }

这很好,但是我想跳过后面的代码,做一些像这样的事情:

OnPageIndexPagerChanged="{Binding Path=FilterCommand}"

这个,我已经为过滤器按钮做了,出现在我的主用户控件中,因此我认为我可以为这个事件做同样的事情。但是每次我收到一个错误:


不可能完成所有的所有权分配"Super.Silverlight.SuperDataPager.OnPageIndexPagerChanged"。(线:90位置:55)


' iexplorer .exe' (Silverlight): Loaded 'C:'Program Files (x86)'Microsoft .exeSilverlight ' 4.0.60531.0 ' ' mscorlib.resources.dll"苏System.Windows.Application。LoadComponent(对象组件,UriresourceLocator)苏苏Super.Silverlight.SchedeConsuntivi.InitializeComponent ()Super.Silverlight.SchedeConsuntivi . .男星()

很抱歉意大利语中的错误,但我无法得到确切的翻译->(无法分配属性…)

谁能给我解释一下这种行为?

谢谢你的阅读,

[编辑]下面是主用户控件的my view Model:

 public class MyViewModel : DependencyObject, INotifyPropertyChanged
{
      public ICommand FilterCommand { get; set; }
      public MyViewModel()
      {
         FilterCommand = new Super.Silverlight.Tools.DelegateCommand<object>(p => Filter());
      }
    public void Filter()
    {
        //....blah blah blah...
    }
}
(/编辑)

将命令绑定到自定义事件处理程序

首先你的事件不是一个RoutedEvent,这是你应该考虑的。但这不是主要问题。

当然你不能把一个命令设置为一个eventandler。不要把RoutedEvents和RoutedCommands搞混了。你有两个选择,你可以给你的UserControl一个iccommand类型的依赖属性,然后在你的代码后面启动它。在XAML中,现在可以绑定命令。或者,如果你想把它作为一个事件,再次考虑使用RoutedEvents,有一些选项可以将命令绑定到RoutedEvents,比如EventBehaviorFactory等等。

最简单的解决方案是直接在用户控件中使用iccommand并删除事件

恐怕你不能这样做,因为命令是特殊类型的路由事件,而阅读DataPager规范似乎不支持任何命令。而在代码中,你要做的,是赋值给event。

编辑

你也可以有变通的方法,但它肯定不会像你想要的那样。

问候。