2016-11-30 22 views
0

CefSharp를 Caliburn.Micro와 잘 연동 시키려하고 있는데, 그렇게하기가 쉽지 않았습니다. 그것은 아마 아직도 쉬울 것이지만 나는 그들 중 누구에게도 익숙하지 않다. CefSharp.WPF와 Caliburn.Micro의 통합

나는 내보기로 브라우저 구성 요소를 추가 :

<cefsharp:ChromiumWebBrowser x:Name="Browser"></cefsharp:ChromiumWebBrowser> 
다음

나는 같은 이름을 가진 내보기 모델에 속성을 추가 : 지금 기대했다

public ChromiumWebBrowser Browser { get; set; } 

그 Caliburn.Micro의 마법 뷰에서 실제 브라우저에이 속성을 바인딩하여 코드 숨김에서 Browser을 사용할 수있었습니다.

내가보기가 활성화 될 때 특정 웹 페이지로 이동하려고이 테스트하려면 브라우저가 다른 스레드가 소유

protected override void OnActivate() 
{ 
    Browser.Dispatcher.Invoke(() => 
    { 
     Browser.Address = "http://stackoverflow.com"; 
     NotifyOfPropertyChange(() => Browser); 
    }); 
    base.OnActivate(); 
} 

때문에 내가 제대로 액세스 할 수 있도록 Dispatcher를 사용하고 있습니다.

이 코드는 예외없이 잘 실행되지만 브라우저가로드 될 때 SO가 열리지 않습니다.

두 개의 ChromiumWebBrowser 개체를 적절하게 바인딩하기 위해 Caliburn.Micro를 얻을 수 없었기 때문에 이것이라고 생각합니다.

어떻게하면됩니까?

답변

0

x:Name을 기반으로 해당 컨트롤에 바인딩 할 사용자 지정 규칙을 추가해야합니다. 그것은 제 3 자 컨트롤이기 때문에 주위에 방법이 없습니다, 그렇지 않으면 당신은 속성을 사용해야 할 것입니다. 상자 밖의 컨벤션이있는 유일한 컨트롤은 .NET의 wpf/silver/windows 전화 프레임 워크에 포함 된 컨트롤입니다 . 메모리가 나를 섬기면 특정 컨트롤에 필요한 다른 단계가 initialize이됩니다. 윈도우 폰

ConventionManager.AddElementConvention<RadDataBoundListBox>(DataControlBase.ItemsSourceProperty, "ItemsSource", "SelectionChanged"); 
ConventionManager.AddElementConvention<RadDockPanel>(RadDockPanel.DockProperty, "Dock", "DockChanged"); 
ConventionManager.AddElementConvention<RadListPicker>(ItemsControl.ItemsSourceProperty, "ItemsSource", "SelectionChanged"); 
ConventionManager.AddElementConvention<RadDatePicker>(DateTimePicker.ValueProperty, "Value", "ValueChanged"); 
ConventionManager.AddElementConvention<RadTimePicker>(DateTimePicker.ValueProperty, "Value", "ValueChanged"); 
ConventionManager.AddElementConvention<RadToggleSwitch>(RadToggleSwitch.IsCheckedProperty, "IsChecked", "CheckChanged"); 
ConventionManager.AddElementConvention<RadContextMenuItem>(RadContextMenuItem.CommandProperty, "Command", "Tap"); 
ConventionManager.AddElementConvention<RadHubTile>(HubTileBase.CommandProperty, "Command", "Tap"); 

에 대한 Telerik의 UI에 대한 사용자 정의 규칙의

http://caliburnmicro.com/documentation/conventions

예 다음은 아주 기본적인하지만 그에 따라 작업을 얻을. ItemsControl에의 selectedItem가 관련

ConventionManager.AddElementConvention<Pivot>(ItemsControl.ItemsSourceProperty, "SelectedItem", "SelectionChanged").ApplyBinding = 
      (viewModelType, path, property, element, convention) => 
      { 
       if (ConventionManager 
        .GetElementConvention(typeof(ItemsControl)) 
        .ApplyBinding(viewModelType, path, property, element, convention)) 
       { 

        ConventionManager 
         .ConfigureSelectedItem(element, Pivot.SelectedItemProperty, viewModelType, path); 
        ConventionManager 
         .ApplyHeaderTemplate(element, Pivot.HeaderTemplateProperty, null, viewModelType); 

        return true; 
       } 
       return false; 
      }; 

고급 대회 ...

당신이 컨트롤 자체와 사용에 노출 가능한 DependencyProperties에 미치는 전적으로 의존 볼 수 있듯이.