在cefSharp事件上使用MVVM Light EventToCommand

时间:2017-07-13 14:44:17

标签: wpf mvvm mvvm-light cefsharp

我有一些问题:

我是cefSharp的网络浏览器,我试图在加载时触发命令:

                                                                                                

我的命令目前为空:

        LoadedCommand = new RelayCommand(() =>
        {

        });

问题是,当事件被触发时,在进入我的命令之前,我得到一个关于跨线程异常的InvalidOperationException

对于我看到的here,似乎这个事件是从一个不是UI线程的线程触发的。

我感觉EventToCommand类试图获取导致应用程序崩溃的UI内容。

您如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您可以使用Behaviour

来完成此操作
public class ChromiumLoadedBehaviour : System.Windows.Interactivity.Behavior<CefSharp.Wpf.ChromiumWebBrowser>
{
    public ICommand Command
    {
        get { return (ICommand)GetValue(CommandProperty); }
        set { SetValue(CommandProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Command.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty CommandProperty =
        DependencyProperty.Register("Command", typeof(ICommand), typeof(ChromiumLoadedBehaviour), new PropertyMetadata(null));


    protected override void OnAttached()
    {
        base.OnAttached();
        this.AssociatedObject.Loaded += AssociatedObject_Loaded;
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        this.AssociatedObject.Loaded -= AssociatedObject_Loaded;
    }

    private void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
    {
        Command?.Execute(null);
    }
}

如果您不知道 - 如何使用Behaviour - 请查看此答案here

其他信息

也许使用FrameLoadEnd事件。