【问题标题】:Use MVVM Light EventToCommand on a cefSharp event在 cefSharp 事件上使用 MVVM Light EventToCommand
【发布时间】:2017-12-18 10:29:31
【问题描述】:

我有一些问题:

我有一个来自cefSharp 的网络浏览器,我试图在其上触发加载命令:

我的命令目前是空的:

        LoadedCommand = new RelayCommand(() =>
        {

        });

问题是当事件被触发时,甚至在输入我的命令之前,我就收到了一个关于跨线程异常的InvalidOperationException

就我看到的here 而言,似乎这个事件是从不是 UI 线程的线程触发的。

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

你会如何解决这个问题?

【问题讨论】:

    标签: wpf mvvm mvvm-light cefsharp


    【解决方案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 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 2017-06-17
      • 2011-03-09
      • 1970-01-01
      相关资源
      最近更新 更多