2014-09-02 76 views
0

我需要綁定一個網格variale類型(接口/類型T /動態等)WPF觀察集合,動態類型

我認爲我將能夠收集綁定到接口的集合的能力然後更改從此界面擴展的對象,並且UI將相應地更新。

private readonly ObservableCollection<IExportItemModel> _exportedDataCollection = new ObservableCollection<IExportItemModel>(); 
    public ObservableCollection<IExportItemModel> ExportedDataCollection 
    { 
     get 
     { 
      return _exportedDataCollection; 
     } 
    } 

List<spGetDataByTransactionId_Result> t = _repository.GetDataByTransactionId(new Guid()); 
List<IExportItemModel> tempList = new List<IExportItemModel>(); 
t.ForEach(r=>tempList.Add(new FixedWidthModel(r))); 

ExportedDataCollection.AddRange(tempList); 

但是UI並不能反映變化,或至少的DevExpress沒有。

會不會有更好的方法,我沒有想到?

由於提前, 奧利

+1

你是什麼意思UP不反映變化?你期望看到什麼?你在看什麼? – Noctis 2014-09-02 11:05:13

+0

是不是更新的集合?或者它是你的模型內容?如果不知道IExportItemModel是什麼,很難說清楚,你可以發佈它嗎?請記住,如果綁定到列表中的項目,您將需要讓IExportItemModel繼承INotifyPropertyChanged,以指示gui需要重繪。給我們一些更多的信息,我相信我們可以幫助你=) – 2014-09-02 11:13:03

+0

@Stian IExportItemModel是一個空的接口,它沒有它。我純粹是因爲有一個擴展接口和一個綁定集合的類型。 – Oli 2014-09-02 11:28:42

回答

2

有許多的方式來實現你想要什麼,這取決於您選擇的UI控件。例如,如果您的ObservableCollection<SomeInterface>集合包含許多已實現該接口的不同類,則可以將它們全部顯示在集合控件中。

但是,如果您選擇使用DataGridAutoGenerateColumns="True",那麼您只能看到在接口中實際定義的屬性,並且沒有在類中定義額外的屬性。另一方面,如果數據將該集合綁定到ItemsControl.ItemsSource,那麼您的數據綁定到所有的屬性,即使是在實現類中定義的那些。

使用基類可以發現類似的結果。爲避免所有問題,通常最容易使用ObservableCollection<object>集合。

+0

哦,一個對象,爲什麼我沒有嘗試過。在我目前的任務之後,我會放棄它。 – Oli 2014-09-02 11:30:31

+0

是的將它設置爲一個普通的對象現在完美的工作,謝謝。 – Oli 2014-09-03 08:31:09