2016-11-30 96 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(); 
} 

因为浏览器是由不同的线程所拥有我使用调度员能够正确地访问它。

所有这些代码运行得很好,没有任何异常,但在浏览器加载时不会打开。

我猜这是因为我一直无法让Caliburn.Micro将两个对象ChromiumWebBrowser绑定在一起。

我该如何做到这一点?

回答

0

您必须添加自定义约定才能绑定到基于x:Name的该控件。没有办法解决这个问题,因为它是第三方控件,否则你将不得不使用属性。只有那些开箱即用的控件是那些包含在wpf/silver/windows phone framework for .NET中的控件。 。如果内存为我服务,那么对于initialize这个特定控件还需要其他一些步骤。这些用于Windows Phone的

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

的例子是非常基本的,但让他们开展相应的工作。

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

更多涉及到的ItemsControl的的SelectedItem先进约定......

正如你可以看到它完全依赖于控件本身并暴露于使用可用DependencyProperties。