4

WPFにCefSharpを使用しています。MVVM アーキテクチャで使用したい。残念ながら問題があります。私が持っているビューで:

<ContentPresenter Content="{Binding Browser}"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Center"/>

ViewModel では、新しいオブジェクトを次の場所に配置しますBrowser

var settings = new CefSharp.Settings
{
    PackLoadingDisabled = true,
}
if (CefSharp.CEF.Initialize(settings))
{
    int counter = 0;
    this.Browser = new WebView();
}

残念ながら、その後はどの時点でも URL を読み込めません。と書かれてBrowser not initializedおり、実際のIsBrowserInitializedプロパティ ( 内Browser) はfalseです。

MVVM ではなくテスト アプリで同じコードを使用して WebView をインスタンス化したため、これは奇妙です。唯一の違いは、ブラウザが MVVM ではないため、プログラムでグリッドにブラウザを追加したことです。

WPF MVVM アプリで CefSharp を入手した人はいますか? 何か案は?

ありがとう

編集: 非 MVVM アプリのテストで、IsBrowserInitializedウィンドウ コンストラクターがジョブを終了するまでプロパティが false に設定されていることに気付きました。

4

2 に答える 2

8

残念ながら、現時点では、CefSharp バージョン 1 は MVVM にはあまり適していません。幸いなことに、CefSharp 3 では、多くのハックを行う必要がないように、より「MVVM 対応」にしようとしました。そこにあるCefSharp.Wpf.Example コードを参照してください。(うまくいけば) 私の言いたいことがわかるでしょう。

PropertyChangedCefSharp バージョン 1.xx で動作させる方法は、イベント ハンドラーをセットアップすることです。プロパティが true に設定されると、IsBrowserInitialized作業を行うことができます。このような:

    webView.PropertyChanged += OnWebViewPropertyChanged;

    // ...

    private void OnWebViewPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        switch (e.PropertyName)
        {
            case "IsBrowserInitialized":
                if (webView.IsBrowserInitialized)
                {
                    webView.Load("http://some/url");
                }
                break;
        }
    }
于 2013-10-26T18:58:37.463 に答える