Взаимодействие WPF в WinForms, как обрабатывать события из элемента управления WPF - PullRequest
1 голос
/ 11 февраля 2011

Я работаю с некоторой совместимостью 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, но я не могу понять, как это сделать в элементе управления взаимодействия.

1 Ответ

1 голос
/ 11 февраля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...