2011-02-18 67 views
1

這是我的AOI類(什麼特別的地方)的一部分:更新問題與數據綁定列表框和PropertyGrid的

class AOI : INotifyPropertyChanged 
{ 
    private Guid _id; 
    private string _name; 
    private string _comment; 

    public Guid Id 
    { 
     get { return _id; } 
    } 

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

    public string Comment 
    { 
     get { return _comment; } 
     set 
     { 
      _comment = value; 
      OnPropertyChanged("Comment"); 
     } 
    } 

    public override string ToString() 
    { 
     if (_name.Length > 0) 
     { 
      return _name; 
     } 
     else 
     { 
      return _id.ToString(); 
     } 
    } 

} 

我讓他們在這勢必給ListBox一個BindingList<AOI>。在ListBoxSelectedValueChanged事件中,我將所選對象分配給PropertyGrid,以便用戶可以修改AOI

除了名稱字段(顯示在ListBox(參見上面的ToString()))中,此工作正常。

當我使用PropertyGrid編輯名稱字段時,ListBox已正確更新。但在PropertyGrid,Name字段(只是值)被清除,只要我按下輸入。當我將光標設置到PropertyGrid中的另一個字段時,顯示正確(已修改)的值。

什麼是最簡單的解決方法來正確處理這個問題?

回答

0

這是PropertyGrid的一個問題。

這也可以與Visual Studio中的設計師一起復制。只需選擇一個控件,並將其最小尺寸更改爲比當前尺寸更大的值。如果您查看網格,則只有在網格中選擇它之後,size屬性中的值纔會更新。

如果某些行將無法正常更新,通常這兩個選項中的一個將幫助:

  • 重新將對象PropertyGrid中通過調用propertyGrid.SelectedObject = myObject
  • 強制格重繪自身通過調用propertyGrid.Invalidate()