簡體   English   中英

Catel更新至5.0后的Radwindow

[英]Radwindow after Catel Update to 5.0

升級到Catel 5.0后,我開始收到如下所示的異常:

類型'System.EventHandler'的對象不能轉換為類型'System.EventHandler`1 [Telerik.Windows.Controls.WindowClosedEventArgs]'。

System.Reflection.MethodBase.CheckArguments(Object []參數,Binder活頁夾,BindingFlags invokeAttr,CultureInfo文化,Signature sig)位於System.Reflection.MethodBase.CheckArguments(Object []參數,Binder活頁夾,BindingFlags invokeAttr,CultureInfo文化,簽名sig)。卡特爾的RuntimeMethodInfo.InvokeArgumentsCheck(對象obj,BindingFlags invokeAttr,活頁夾活頁夾,Object []參數,CultureInfo文化)在卡特爾。 C:\\ CI_WS \\ Ws \\ 103722 \\ Source \\ Catel \\ src \\ Catel.MVVM \\ Catel.MVVM.Shared \\ Services \\ UIVisualizerService中的Services.UIVisualizerService.HandleCloseSubscription(對象窗口,對象數據,EventHandler`1completeProc,布爾值isModal)。 wpf.cs:Catel.Services.UIVisualizerService.ShowWindowAsync(FrameworkElement窗口,Object data,Boolean showModal)中的141行,位於C:\\ CI_WS \\ Ws \\ 103722 \\ Source \\ Catel \\ src \\ Catel.MVVM \\ Catel.MVVM.Shared \\服務\\ UIVisualizer Service.wpf.cs:Catel.Services.UIVisualizerService.d__15.MoveNext()中的155行位於C:\\ CI_WS \\ Ws \\ 103722 \\ Source \\ Catel \\ src \\ Catel.MVVM \\ Catel.MVVM.Shared \\ Services \\ UIVisualizerService中。 cs:line 222 ---從上一個引發異常的位置開始的堆棧跟蹤---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

我基本上已經將所有窗口(消息框,模型窗口和主外殼)設置為在實現IDatawindow接口時從Radwindow繼承,並且當我嘗試利用“ IUIVisualizerService”時會發生這種情況。 下面是一個示例:

public class MessageService : Catel.Services.MessageService, IAppMessageService
{...
public MessageService(IDispatcherService dispatcherService, IUIVisualizerService uiVisualizerService, IViewModelFactory viewModelFactory)
        : base(dispatcherService)
    {
        Argument.IsNotNull(() => dispatcherService);
        Argument.IsNotNull(() => uiVisualizerService);
        Argument.IsNotNull(() => viewModelFactory);

        this._dispatcherService = dispatcherService;
        this._uiVisualizerService = uiVisualizerService;
        this._viewModelFactory = viewModelFactory;
    }
public override Task<MessageResult> ShowAsync(string message, string caption = "", MessageButton button = MessageButton.OK, MessageImage icon = MessageImage.None)
    {...
this._dispatcherService.BeginInvoke(async () =>
        {
            var previousCursor = Mouse.OverrideCursor;
            Mouse.OverrideCursor = null;

            var vm = this._viewModelFactory.CreateViewModel<MessageBoxViewModel>(null, null);

            vm.Message = message;
            vm.Button = button;
            vm.Icon = icon;
            vm.SetTitle(caption);

            await this._uiVisualizerService.ShowDialogAsync(vm);

嘗試顯示如上所示的對話框時發生錯誤。

我正在使用Orchestra源代碼提供的確切示例:

private readonly WindowLogic _logic;
    private event EventHandler<EventArgs> ViewLoaded;
    private event EventHandler<EventArgs> ViewUnloaded;
    private event EventHandler<DataContextChangedEventArgs> ViewDataContextChanged;
    private event EventHandler<WindowClosedEventArgs> ViewClosed;

    public AppMessageBoxWindow() : this(null) { }

    public AppMessageBoxWindow(IViewModel viewModel)
    {
        GetAndSetIcon();
        this.FixBlurriness();
        this.SizeToContent = true;
        this.ResizeMode = ResizeMode.NoResize;
        this.WindowStartupLocation = WindowStartupLocation.CenterOwner;

        this._logic = new WindowLogic(this, null, viewModel);
        this._logic.ViewModelChanged += (sender, args) => ViewModelChanged.SafeInvoke(this, args);
        this._logic.PropertyChanged += (sender, args) => PropertyChanged.SafeInvoke(this, args);
        this._logic.ViewModelPropertyChanged += (sender, e) => ViewModelPropertyChanged.SafeInvoke(this, e);

        Loaded += (sender, args) => ViewLoaded.SafeInvoke(this, args);
        Unloaded += (sender, args) => ViewUnloaded.SafeInvoke(this);
        DataContextChanged += (sender, e) => ViewDataContextChanged.SafeInvoke(this, new DataContextChangedEventArgs(e.OldValue, e.NewValue));

        OnViewModelChanged();
    }

    public IViewModel ViewModel => this._logic.ViewModel;
    private void GetAndSetIcon()
    {
        this.Icon = new Image { Source = new BitmapImage(ImagesUri.AppIcon) };
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public event EventHandler<EventArgs> ViewModelChanged;
    public event EventHandler<PropertyChangedEventArgs> ViewModelPropertyChanged;
    event EventHandler<EventArgs> IView.Loaded
    {
        add { ViewLoaded += value; }
        remove { ViewLoaded += value; }
    }
    event EventHandler<EventArgs> IView.Unloaded
    {
        add { ViewUnloaded += value; }
        remove { ViewUnloaded += value; }
    }
    event EventHandler<DataContextChangedEventArgs> IView.DataContextChanged
    {
        add { ViewDataContextChanged += value; }
        remove { ViewDataContextChanged += value; }
    }
    private void OnViewModelChanged()
    {
        if (ViewModel != null && !ViewModel.IsClosed)
        {
            ViewModel.ClosedAsync += ViewModelClosed;
        }
    }
    private Task ViewModelClosed(object sender, ViewModelClosedEventArgs e)
    {
        Close();
        return TaskHelper.Completed;
    }
        }

看起來這可能是在處理UIVisualizerService中的close事件時發生的。

這可能是由WeakEventListener的新實現引起的錯誤。 請在https://github.com/catel/catel上使用repro(無任何第三方庫)報告此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM