2011-08-04 34 views
3

我想创建一个datapager usercontrol。这个用户控件有一个事件在其代码中声明的背后:将一个ICommand绑定到一个自定义事件处理程序

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}" 

这一点,我已经为过滤器按钮,出现在我的主要用户控件做的,所以我想我可以为这个事件做同样的。但每次我收到一个错误:


Impossibile assegnare阿拉proprietà 'Super.Silverlight.SuperDataPager.OnPageIndexPagerChanged'。 [行:90 位置:55]


'IEXPLORE.EXE'(Silverlight的):已加载“C:\ Program Files文件(x86)的\微软的Silverlight \ 4.0.60531.0 \是\ mscorlib.resources。 DLL”ス System.Windows.Application.LoadComponent(对象部件,乌里 resourceLocator)苏 Super.Silverlight.SchedeConsuntivi.InitializeComponent()苏 Super.Silverlight.SchedeConsuntivi..ctor()

对不起对于意大利语的错误,但我无法以获得确切的翻译 - >(无法分配财产...)

有人可以解释我这种行为?

感谢您的阅读,

[编辑] 下面是主要的用户控件的我的视图模型:

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... 
    } 
} 

[/编辑]

回答

1

所有事件首先是不是RoutedEvent,你应该考虑。但那不是主要问题。

当然,您不能将ICommand设置为EventHandler。不要让RoutedEvents与RoutedCommands混淆。你有2个选项,你可以给你的UserControl一个ICommand类型的依赖项属性,然后在你的代码后面触发它。在XAML中,你可以绑定你的命令。或者如果你想把它作为一个事件,再次考虑使用RoutedEvents,可以选择将命令绑定到routedevents,如EventBehaviorFactory等等。

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

0

恐怕你不能这样做,原因Command是特殊类型的路由事件,而不是读取DataPager规范似乎不支持任何命令。而你在代码中所做的事情,则是分配给事件。

编辑

你可以有也workarrounds但它不会一定喜欢你想在这里。

问候。

相关问题