代码之家  ›  专栏  ›  技术社区  ›  Chris Vig

如何确定PropertyGrid控件何时要修改对象的属性

  •  2
  • Chris Vig  · 技术社区  · 17 年前

    override void OnSetPropertyStart()
    {
        suppressRefresh = true;
    }
    override void OnSetPropertyEnd()
    {
        suppressRefresh = false;
    }
    

    不幸的是,事实似乎并非如此。是否有其他方法可以确定属性网格何时设置属性,或者以其他方式实现相同的效果?

    1 回复  |  直到 17 年前
        1
  •  1
  •   Marc Gravell    17 年前

    这种类型在你的控制之下吗?你可以添加一个 FooUpdating / FooUpdated 两个事件?另一种选择是编写一个自定义属性模型 TypeDescriptionProvider

    类似于(更新为显示3.5方法;有关2.0示例,请参阅历史记录):

    class MyType : INotifyPropertyChanged, INotifyPropertyChanging
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public event PropertyChangingEventHandler PropertyChanging;
    
        protected void UpdateField<T>(ref T field, T newValue, string propertyName)
        {
            if (!EqualityComparer<T>.Default.Equals(field, newValue))
            {
                OnPropertyChanging(propertyName);
                field = newValue;
                OnPropertyChanged(propertyName);
            }
        }
        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this,
                new PropertyChangedEventArgs(propertyName));
        }
        protected void OnPropertyChanging(string propertyName)
        {
            PropertyChangingEventHandler handler = PropertyChanging;
            if (handler != null) handler(this,
                new PropertyChangingEventArgs(propertyName));
        }
        private string name;
    
        public string Name
        {
            get { return name; }
            set { UpdateField(ref name, value, "Name"); }
        }
        private DateTime dateOfBirth;
        public DateTime DateOfBirth
        {
            get { return dateOfBirth; }
            set { UpdateField(ref dateOfBirth, value, "DateOfBirth"); }
        }
    }