首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从[Serializable] INotifyPropertyChanged实现者中排除不可序列化的观察者?

要从Serializable INotifyPropertyChanged实现者中排除不可序列化的观察者,可以通过以下步骤实现:

  1. 在INotifyPropertyChanged接口中添加一个新的事件,例如:[field: NonSerialized] public event PropertyChangedEventHandler PropertyChangedEx;
  2. 在需要排除不可序列化观察者的类中,使用PropertyChangedEx事件替代PropertyChanged事件。
  3. 在需要排除不可序列化观察者的类中,重写OnPropertyChanged方法,使其触发PropertyChangedEx事件而不是PropertyChanged事件。

这样,在序列化时,不会包含不可序列化的观察者,从而避免了序列化错误。

以下是一个示例代码:

代码语言:csharp
复制
using System;
using System.ComponentModel;
using System.Runtime.Serialization;

namespace SerializationExample
{
    [Serializable]
    public class SerializableClass : INotifyPropertyChanged
    {
        [field: NonSerialized]
        public event PropertyChangedEventHandler PropertyChangedEx;

        private string _name;

        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
                OnPropertyChanged(nameof(Name));
            }
        }

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEx?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

在这个示例中,PropertyChangedEx事件用于替代PropertyChanged事件,并且使用[field: NonSerialized]属性标记,以避免在序列化时包含不可序列化的观察者。OnPropertyChanged方法也被重写,以便在属性更改时触发PropertyChangedEx事件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券