0

次のUserControlを作成しました。

public partial class ReplacementPatternEditor : UserControl, INotifyPropertyChanged
{
    ....

    public static readonly RoutedEvent CollectionChanged = EventManager.RegisterRoutedEvent(
        "CollectionChanged", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ReplacementPatternEditor));

    void RaiseCollectionChangedEvent()
    {
        RoutedEventArgs newEventArgs = new RoutedEventArgs(ReplacementPatternEditor.CollectionChanged);
        RaiseEvent(newEventArgs);
    }

    ...
}

ここで、xamlコード内でこのルーティングされたイベントを使用しようとすると、次のようになります。

<local:ReplacementPatternEditor ItemsSource="{Binding MyItemSource}" CollectionChanged="OnCollectionChanged"/>

コンパイル時に次のエラーが発生します:

The property 'CollectionChanged' does not exist in XML namespace 'clr-namespace:MyNamespace'

なぜこれを取得するのですか?また、ルーティングされたイベントを機能させるにはどうすればよいですか?

4

1 に答える 1

2

このMSDNリンクを見てください。それはあなたが行ったハンドラーの登録について話し、それから私があなたのコードに見ないイベントのためにCLRアクセサーを提供することについて話します。次に、イベントハンドラーを追加します。イベント宣言がありません

つまり、このようなもの

public static readonly RoutedEvent CollectionChangedEvent = EventManager.RegisterRoutedEvent( 
    "CollectionChanged", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ReplacementPatternEditor)); 

public event RoutedEventHandler CollectionChanged
{
    add { AddHandler(CollectionChangedEvent, value); } 
    remove { RemoveHandler(CollectionChangedEvent, value); }
}


void RaiseCollectionChangedEvent() 
{ 
    RoutedEventArgs newEventArgs = new RoutedEventArgs(ReplacementPatternEditor.CollectionChanged); 
    RaiseEvent(newEventArgs); 
} 
于 2012-05-15T21:17:53.423 に答える