2011-02-11 4 views
1

WinForms 응용 프로그램에서 WPF 상호 운용성을 사용하고 있습니다. 다음과 같은 설정을했습니다.WinForms의 Interop WPF, WPF 컨트롤의 이벤트 처리 방법

  • 윈폼 UserControl을 WFControl
    • WPF UserControl을 GalleryControl
      • 리스트 박스 GalleryItems
        • 리스트 박스 ItemTemplate을 GalleryItem

GalleryContem을 호스팅하는 Winforms에는 GalleryItem의 ItemTemplate이있는 GalleryItems (ListBox)가 있습니다.

이제 WFControl에서 GalleryItems에있는 시간을 확인하고 싶습니다. SelectionChanged 이벤트가 발생했습니다. GalleryControl에 인 selectionchanged 이벤트를 처리하고 내 윈폼 읽을 수있는 별도의 공개 이벤트를 발생이

  • 하지만 이후 나는 그와 같은 이벤트를 처리 할 수 ​​없습니다

    나의 현재 시도

    는에 시도 라우트 된 이벤트가 아닙니다. 만약 내가 어떻게 처리 할 수있는이 작동합니다. 적용 코드 :

    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의 실제 이벤트에 가입 탐색 일부 컨트롤 트리를 통해 목록 상자를 찾을 수 있지만 내가 할 방법을 알아낼 수없는 것 것을 본 적이 이것 interop'd 통제에서.

답변

1

현재 프로젝트에서 비슷한 문제가 있으며 설명하는대로 문제를 해결하고 있습니다. WPF 컨트롤은 공개 (일반) 이벤트를 다시 발생시킨 다음 WinForms 컨트롤에서 처리합니다.

솔직히 Winforms에서 처리하기 위해 라우트되어야하는 부분을 알지 못합니다. ...

+0

I를

내 윈폼은 읽을 수 있지만이

당신이 "+ ="이 일을 처리하는 데 사용하는 라우트 된 이벤트 아니에요 이후이 같은 이벤트를 처리 할 수 ​​없습니다 winItems의 GalleryItems.SelectionChanged에 접근 할 수 없다. – msarchet