1

我正在使用 WinForms 应用程序中的一些 WPF 互操作性。我有以下设置。

  • WinForms 用户控件 WFControl
    • WPF 用户控件库控件
      • ListBox GalleryItems
        • 列表框项模板库项

托管 GalleryControl 的 Winforms,它具有 GalleryItems (ListBox),其 ItemTemplate 为 GalleryItem。

现在在 WFControl 中,我想查看 GalleryItems 何时SelectionChanged触发了它的事件。

我目前的尝试试图:

  • 处理 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 处理的部分。

我的 winform 可以读取,但我无法处理这样的事件,因为它不是路由事件

你用“+=”来处理这个......

于 2011-02-11T16:47:36.807 回答