2017-10-27 5 views
0

BindingListと組み合わせてPropertyGridの奇妙な動作に気付きました。PropertyGrid - > BindingList - >リストに項目を追加するときの奇妙な動作

BindingListに項目を追加すると、PropertyGridは最初にBindingListからすべての項目を消去してから、直前の項目をすべて1つずつ追加してから新しい項目を追加します。

私の問題は、毎回 'ListChanged'イベントを発生させますが、2番目のアイテムを追加するときなど、3回追加したアイテムごとに1回だけしたいとします。ここで

は一例です:

private void Form1_Load(object sender, EventArgs e) 
{ 
    propertyGrid1.SelectedObject = new Foo(); 
} 

private class Foo 
{ 
    [DisplayName("BindingList")] 
    [Description("BindingList")] 
    [Category("BindingList")] 
    [Browsable(true)] 
    public BindingList<int> Bar { get; set; } = new BindingList<int>(); 

    public int BindingListEventRaiseCount { get; set; } = 0; 

    public Foo(){ 
     Bar.ListChanged += OnBinListChanged; 
    } 

    private void OnBinListChanged(object sender, EventArgs e){ 
     BindingListEventRaiseCount++; 
     Console.WriteLine("Current ListElementsCount: " + ((BindingList<int>)sender).Count); 
    } 
} 

出力PropertyGridコントロールを通じて3つの項目を追加している:

Current ListElementsCount: 0 
Current ListElementsCount: 1 
Current ListElementsCount: 0 
Current ListElementsCount: 1 
Current ListElementsCount: 2 
Current ListElementsCount: 0 
Current ListElementsCount: 1 
Current ListElementsCount: 2 
Current ListElementsCount: 3 

をこのバグの修正はありますか?

答えて

1

これは役に立ちますが、アイテムが再び作成される前には常にResetがあります。
OKを押すと、リセットも実行されます。

private void OnBinListChanged(object sender, ListChangedEventArgs e) 
{ 
    switch (e.ListChangedType) 
    { 
     case ListChangedType.ItemAdded: 
      BindingListEventRaiseCount++; 
      Console.WriteLine("Current ListElementsCount: " + ((BindingList<int>)sender).Count); 
      break; 
     case ListChangedType.Reset: 
      Console.WriteLine("Reset"); 
      break; 
    } 
} 

(4つの項目について)出力:

Reset 
Current ListElementsCount: 1 
Reset 
Current ListElementsCount: 1 
Current ListElementsCount: 2 
Reset 
Current ListElementsCount: 1 
Current ListElementsCount: 2 
Current ListElementsCount: 3 
Reset 
Current ListElementsCount: 1 
Current ListElementsCount: 2 
Current ListElementsCount: 3 
Current ListElementsCount: 4 
Reset 
Current ListElementsCount: 1 
Current ListElementsCount: 2 
Current ListElementsCount: 3 
Current ListElementsCount: 4 
関連する問題