1

WinFormsアプリケーションでいくつかのWPF相互運用性を使用しています。私は次のように設定しています。

  • WinForms UserControl WFControl
    • WPF UserControl GalleryControl
      • ListBox GalleryItems
        • ListBox ItemTemplate GalleryItem

GalleryItemのItemTemplateを持つGalleryItems(ListBox)を持つGalleryControlをホストするWinforms。

SelectionChangedここで、WFControlで、GalleryItemsがイベントをトリガーしたときを確認したいと思います。

私の現在の試みは次のことを試みました:

  • GalleryControlでSelectionChangedイベントを処理し、WinFormが読み取ることができる個別のパブリックイベントを発生させるようにしますが、ルーティングされたイベントではないため、そのようなイベントを処理することはできません。私がそれを処理する方法を理解できれば、これはうまくいくでしょう。該当するコード:

    public event ClaimGallery SelectedClaimChanged;
    public ViewModels.InsuranceClaimViewModel ClaimViewModel { get; set; }
    public int SelectedClaimID
    {
        get
        {
            return ((Models.InsuranceClaim) ClaimList.SelectedItem).ID;
        }
    }
    public ClaimGallery()
    {
        InitializeComponent();
        ClaimViewModel = new ViewModels.InsuranceClaimViewModel();
        DataContext = ClaimViewModel;
        ClaimList.ItemsSource = ClaimViewModel.InsuranceClaims;
        ClaimList.SelectionChanged += ClaimSelectionChanged;
    }
    
    private void ClaimSelectionChanged(object sender, EventArgs e)
    {
        //This is the part that doesn't work
        ClaimList.RaiseEvent(new RoutedEventArgs(SelectedClaimChanged, this));
    } 
    

また、WFControlの実際のイベントへのサブスクライブを参照するコントロールツリーを介してListBoxを見つけることができる可能性があることもわかりましたが、相互運用されたコントロールでこれを行う方法がわかりません。

4

1 に答える 1

1

私の現在のプロジェクトでも同様の問題があり、あなたが説明する方法でそれを解決しています。WPFコントロールは、パブリック(通常)イベントを再発生させます。このイベントは、WinFormsコントロールによって処理されます。

正直なところ、Winformsで処理するためにルーティングする必要があるとあなたが言っている部分はわかりません。

私のwinformsは読み取ることができますが、ルーティングされたイベントではないため、そのようなイベントを処理できません。

これを処理するには「+=」を使用します...

于 2011-02-11T16:47:36.807 に答える