2015-10-02 153 views
1

我試圖綁定WPF DataGridList<ClassName>WPF DataGrid綁定到列表<Type>

下面是我DataGrid

<DataGrid ItemsSource="{Binding Source=FileProcessing}" AutoGenerateColumns="True"></DataGrid> 

下面我綁定與數據庫中記錄的列表:

FileProcessing = GetFileProcessingInfo(dtDateStart, dtDateEnd); 

FileProcessing定義如下屬性:

public List<FileProcessing_T> FileProcessing { get; set; } 

GetFileProcessingInfo方法也返回一個List<FileProcessing_T>對象。

FileProcessing列表確實從數據庫獲取了一些記錄,但網格不綁定列表中的數據。

我會感謝您的幫助。

+0

將'List'改爲'ObservableCollection',看看是否有幫助? – simonalexander2005

+0

是的,ObservableCollection更好。無論如何,我認爲問題是列表的元素與網格不兼容的類型。你可以發佈FileProcessing_T信息嗎? – Jose

+0

'FileProcessing'是一個屬性,所以看起來應該是'Path',而不是'Source'。當然,源應該是具有'FileProcessing'屬性的對象。這裏的源代碼應該是一個視圖模型,並通過'DataContext'隱式地向下流動。 – Hopeless

回答

1

你可以保留你的數據綁定。

但是,您必須在FileProcessing屬性所在的類中實現INotfifyPropertyChanged接口。 因爲在設置者FileProcessing中,您必須執行更改通知。

public ObservableCollection<FileProcessing_T> FileProcessing 
    { 
     get 
     { 
      return _fileProcessing; 
     } 
     set 
     { 
      if (_fileProcessing != value) 
      { 
       _fileProcessing = value; 
       RaisePropertyChanged("FileProcessing"); 
      } 
     } 
    } 
    ObservableCollection<FileProcessing_T> _fileProcessing; 


    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 

    public void RaisePropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

否則,UI控件將不知道(不會被通知)綁定數據已經改變。


這將足以解決您的問題。 如果您繼續使用List<FileProcessing_T>而不是ObservableCollection<FileProcessing_T>,它甚至可以工作,但ObservableCollection也支持更改通知,如果單個元素被添加並從集合中刪除,而List則不支持。

+0

非常感謝你們。馬丁你的解決方案幫助我。 – Linda