2011-08-04 7 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); 
      } 
     } 

そして、これが正常に動作します、しかし、私は、Liを持っているでしょうような何かの背後にあるコードを通過スキップするヒツジシラミバエ:

OnPageIndexPagerChanged="{Binding Path=FilterCommand}" 

これを、私はすでに私のメインのユーザーコントロールに存在し、フィルタボタンのために行う、したがって、私は、このイベントのために同じことを行うことができると思いました。しかし、私はエラーが表示されるたびに:


Impossibile assegnareのアラproprietà 'をSuper.Silverlight.SuperDataPager.OnPageIndexPagerChanged'。 [ライン:90 ポジション:55]


'iexplore.exeを'(シルバー):ロード「C:\プログラムファイル(x86の)\マイクロソフト のSilverlight \ 4.0.60531.0それ\ mscorlib.resources \。 DLL」SU System.Windows.Application.LoadComponent(オブジェクトコンポーネント、ウリ resourceLocator)SU Super.Silverlight.SchedeConsuntivi.InitializeComponent()SU Super.Silverlight.SchedeConsuntivi..ctor()該当

イタリア語のエラーのために、私はできませんでした正確な翻訳を取得する - >(プロパティを割り当てることができません...)

誰かがこの現象を私に説明できますか?読書、

ため

おかげでここで[EDIT] は、メインユーザーコントロールのための私の見解モデルである:

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

[/ EDIT]

答えて

1

すべてのイベントの最初ではありませんRoutedEvent、あなたが考慮する必要があります。しかし、それは主要な問題ではありません。

もちろん、ICommandをEventHandlerに設定することはできません。 RoutedEventsとRoutedCommandsを混同しないでください。あなたは2つのオプションがあります。あなたはUserControlにICommand型の依存関係プロパティを与えて、あなたのコード内でそれを起動することができます。 XAMLでは、コマンドを今すぐバインドできます。または、イベントとしてそれを持っている場合は、RoutedEventsの使用をもう一度検討してください。EventBehaviorFactoryなどのルーテッドイベントにコマンドをバインドするオプションがあります。

最も簡単な解決策は、ユーザーコントロールでICommandを直接使用してイベントを削除することです。

0

Commandは特別なタイプのルーティングイベントであるため、DataPagerの読み取りはコマンドをサポートしていないようです。代わりにコードで行うことは、イベントに割り当てられます。あなたが持つことができる

EDIT

もworkarroundsが、それは間違いなくあなたがここに欲しい好きではないだろう。

よろしくお願いいたします。

関連する問題