首页 > 解决方案 > 调用 PropertyChangedEventHandler 时出现 InvalidCastException

问题描述

情况

问题

问题

代码

控制.xaml

Maximum="{Binding TimeControlCanvasWidth, Converter={StaticResource DebugConverter}}" />

模型库.cs

public class ModelBase : INotifyPropertyChanged
{
    /// <summary>
    /// The event raised, when the property changed
    /// </summary>
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
    {
        try
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        catch (System.InvalidCastException)
        {
            LogManager.Current.GetLogger(GetType()).LogCritical(() => $"#####{nameof(OnPropertyChanged)}" +
                $" - InvalidCastException | propertyName={propertyName}");
        }
    }

    protected virtual bool SetProperty<T>(ref T field, T value, [CallerMemberName]string propertyName = null)
    {
        if (field?.Equals(value) == true)
        {
            return false;
        }

        field = value;

        // ReSharper disable once ExplicitCallerInfoArgument
        OnPropertyChanged(propertyName);
        return true;
    }
}

}

视图模型.cs

public class TimeControlViewModel : ModelBase 
{ 
    private double _timeControlCanvasWidth;

    public double TimeControlCanvasWidth
    {
        get => _timeControlCanvasWidth;
        set
        {
             if (SetProperty(ref _timeControlCanvasWidth, value))
             {
                // do sth.
             }
        }
    }
}

标签: c#xamlmvvmdependency-propertiesinotifypropertychanged

解决方案


推荐阅读