2016-11-30 9 views
0

CefSharpをCaliburn.Microとうまく組み合わせようとしていますが、それは私が望むほど簡単ではありませんでした。それはおそらくまだ簡単ですが、私はどちらかで十分に精通していないだけです。CefSharp.WPFとCaliburn.Microの統合

私は、私の見解にブラウザコンポーネントを追加しました:私は今Caliburn.Microの魔法のことを期待していた

public ChromiumWebBrowser Browser { get; set; } 

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

それから私は、同じ名前を持つ私の見解モデルにプロパティを追加しました私のコードビハインドからBrowserを使用できるように、このプロパティをビューの実際のブラウザにバインドしました。ブラウザが、私はそれを正しくアクセスできるようにディスパッチャを使用している別のスレッドによって所有されているので

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

:私はビューがアクティブになったとき、特定のWebページに移動しようとするこれをテストするために

このコードは、例外なくすべて正常に動作しますが、ブラウザがロードされてもSOは開かれません。

これは、2つのChromiumWebBrowserオブジェクトを正しくバインドするためにCaliburn.Microを取得できなかったためです。

どうすればこの問題を解決できますか?

答えて

0

x:Nameに基づいてそのコントロールにバインドするカスタムのConventionを追加する必要があります。それが第三者のコントロールだからそういうものはありません。さもなければ、あなたはプロパティを使用しなければなりません。ボックスのコンベンションを持つ唯一のコントロールは、.NETのwpf/silver/windows電話フレームワークに含まれているものです。メモリが私に役立つならば、その特定のコントロールのために必要ないくつかのステップがinitializeにもあります。 Windowsの携帯電話用TelerikのUI用のカスタム規則の

http://caliburnmicro.com/documentation/conventions

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"); 

これらは非常に基本的ですが、彼らはそれに応じて作業します。

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にその完全に依存を見ることができるように。