Взаимодействие WPF в WinForms, как обрабатывать события из элемента управления WPF

Я работаю с некоторой совместимостью WPF в приложении WinForms. У меня есть следующая настройка.

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

Winforms размещает GalleryControl, у которого есть GalleryItems (ListBox), у которого есть ItemTemplate для GalleryItem.

Теперь в WFControl я хочу видеть, когда GalleryItems запускает SelectionChanged событие.

Мои текущие попытки:

  • Обработайте событие SelectionChanged в GalleryControl и заставьте его вызвать отдельное общедоступное событие, которое мои winforms могут прочитать, но я не могу обработать подобное событие, поскольку это не перенаправленное событие. Это сработало бы, если бы я мог понять, как с этим справиться. применимый код:

    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));
    } 
    

Я также видел, что потенциально могу найти ListBox через какое-то дерево управления, просматривая подписку на фактическое событие в WFControl, но я не могу понять, как это сделать в элементе управления взаимодействием.


person msarchet    schedule 11.02.2011    source источник


Ответы (1)


У меня есть похожие проблемы в моем текущем проекте, и я решаю их так, как вы описываете. Элементы управления WPF повторно вызывают общедоступное (нормальное) событие, которое затем обрабатывается элементом управления WinForms.

Честно говоря, я не понимаю той части, в которой вы утверждаете, что она должна быть маршрутизирована для обработки Winforms.

мои winforms могут читать, но я не могу обработать подобное событие, так как это не перенаправленное событие

вы используете "+ =", чтобы справиться с этим ...

person Martin Moser    schedule 11.02.2011
comment
Я не могу перейти к GalleryItems.SelectionChanged в winforms - person msarchet; 11.02.2011