2008-11-28 43 views
3

我試圖創建一個檢查/取消選中所有CheckBoxCheckBoxes位於GridViewColumn的單元格模板內。我將此列添加到GridView(以及其他列),將GridView設置爲ListView的視圖屬性,然後將ListView數據綁定到自定義DataObjects的集合。因此,ListView的每一行都有一列包含複選框以及綁定到綁定對象的屬性路徑的列。WPF:選中/取消選中位於gridview單元格模板中的複選框的所有複選框?

我想創建檢查/通過綁定CheckBoxesIsChecked財產取消所有CheckBox,但我不希望更改的數據ListView勢必反對。我的第一個嘗試是將ListView綁定到Dictionary<DataObject,Boolean>,然後將IsChecked屬性綁定到DictionaryValue,將其他列綁定到KeyDataObjectProperty。然後,我簡單地切換字典的Values,然後選中/取消選中全部CheckBox被點擊。綁定工作正常,但顯然字典不支持更改通知,所以CheckBoxes從未更新。

有沒有人有任何建議,以解決這個問題的最佳途徑?

回答

2

我能想到的唯一方法是將您的DataObject和布爾值封裝在實現INotofyPropertyChanged的新類中。說新的類是YourCollection。將ObservableCollection<YourNewClass>實例綁定到您的ListView中

public class YourNewClass :INotifyPropertyChanged 
{ 
    public YourDataObject Object { get; set; } 

    private bool _isChecked; 
    public bool IsChecked 
    { 
     get 
     { 
      return _isChecked; 
     } 
     set 
     { 
      _isChecked = value; 
      OnPropertyChanged("IsChecked"); 
     } 
    } 

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

好主意,謝謝。如果YourNewClass是通用參數是YourDataObject的類型正確的通用參數,這仍然可以工作?即: public class YourNewClass :INotifyPropertyChanged { public T Object {get;組; } ... } – Robin 2008-11-28 20:01:27

相關問題