0

propertyGrid に問題があります。

propertyGrid にマップされる DummySettings というクラスがあります。プロパティ「Name」があります。

propertygrid EG Name プロパティに何かを入力するときに、「TextChanged」というイベントを発生させたい

INotifyPropertyChanged イベントを実装して発生させたにもかかわらず、propertyGrid で考えられるあらゆる種類のイベントをフックしたにもかかわらず、テキストが変更されたときにこのイベントは発生しません。

明らかなことを見逃していますか?

編集済み

疑似コード

   public class DummySettings : INotifyPropertyChanged
            {
                private string name;


                [DisplayName("Name")]
                public string Name
                {
                    get { return name; }
                    set
                    {
                        if (name != value)
                        {
                          name = value;
                         OnPropertyChanged("Name");
                        }
                    }
                }

                public event PropertyChangedEventHandler PropertyChanged;

                protected virtual void OnPropertyChanged(string propertyName)
                {
                    PropertyChangedEventHandler handler = PropertyChanged;
                    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
                }
            }



        //UserControl
    public partial class DummyControl : UserControl
    {
     private DummySettings settings;

     ///Constructor
    public DummyControl()
    {
        InitializeComponent();

        settings = new DummySettings();
        propertyGrid1.SelectedObject = settings;
        settings.PropertyChanged += OnDummyPropertyChanged;


     //All the events I have hooked up but not firing when text is changed 
    private void OnDummyPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
          btnToEnable.Enabled = HasName();
    }        
     private void propertyGrid1_Leave(object sender, EventArgs e)
    {
               btnToEnable.Enabled = HasName();
    }

    private void propertyGrid1_Validating(object sender, CancelEventArgs e)
    {
        btnToEnable.Enabled = HasName();
    }

    private void propertyGrid1_SelectedObjectsChanged(object sender, EventArgs e)
    {
          btnToEnable.Enabled = HasName();
    }


    private void propertyGrid1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
         btnToEnable.Enabled = HasName();
    }

      private bool HasName()
    {
        return settings.Name.IsNotNullOrEmpty();
    }
4

1 に答える 1

1

PropertyValueChangedイベントを使用して、PropertyGrid で変更された選択されたオブジェクト プロパティの通知を受け取ることができます。したがって、Nameプロパティ値を「Foo」から「Bar」に変更すると、次のイベントが発生します。

void propertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{
    // previous value is e.OldValue, "Foo"
    // property name is e.ChangedItem.Label, "Name"
    // new value is e.ChangedItem.Value, "Bar"
}
于 2013-02-13T21:54:43.637 に答える