2011-08-04 35 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但它不會一定喜歡你想在這裏。

問候。

相關問題