2017-10-27 19 views
0

BindingList와 함께 PropertyGrid의 이상한 동작을 발견했습니다.PropertyGrid -> BindingList -> 목록에 항목을 추가 할 때의 이상한 동작

BindingList에 항목을 추가하면 PropertyGrid는 먼저 BindingList에서 모든 항목을 지운 다음 이전 항목을 하나씩 새로 추가하고 그 후에 만 ​​새 항목을 추가합니다.

제 문제는 매번 'ListChanged'이벤트가 발생하지만 두 번째 항목을 추가 할 때 예를 들어 3 회가 아닌 각 추가 된 항목에 대해 한 번만 갖고 싶습니다. PropertyGrid가 제어를 통해 3 개 항목을 추가하는 동안

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); 
    } 
} 

출력 :

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