2014-09-02 56 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