【问题标题】:WPF Observable collection, dynamic typeWPF Observable 集合,动态类型
【发布时间】:2014-09-02 10:57:24
【问题描述】:

我需要能够将网格绑定到变量类型的集合(接口/类型 T/动态等)

我认为我可以将集合绑定到一个接口,然后更改从该接口扩展的对象,并且 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 没有。

有没有更好的方法我没有想到?

提前致谢, 奥利

【问题讨论】:

  • 你的意思是 UP 没有反映这些变化?你希望看到什么?你在看什么?
  • 是收藏不更新吗?还是您的模型内容?如果不知道 IExportItemModel 是什么就很难说,你能把它贴出来吗?请记住,如果绑定到列表中的项目,您需要让 IExportItemModel 继承 INotifyPropertyChanged,以便向 gui 发出需要重绘的信号。给我们更多信息,我相信我们可以为您提供帮助 =)
  • @Stian IExportItemModel 是一个空接口,它什么都没有。我做它纯粹是为了有一个接口到范围和一个类型来绑定集合。
  • @Noctis UI 什么都不做,甚至不显示类型,但我认为 DevExpress 正在掩盖这一点。
  • @Oli 我无法回答你的问题,没有更多信息,比如你的 xaml。所以我明白你想在这里做什么。你的 debugoutbut 说什么?任何绑定错误异常等?

标签: wpf dynamic binding devexpress observablecollection


【解决方案1】:

根据您选择的 UI 控件,有多种方法可以实现您想要的效果。例如,如果您有一个 ObservableCollection&lt;SomeInterface&gt; 集合,其中包含许多已实现该接口的不同类,那么您可以将它们全部显示在集合控件中。

但是,如果您选择将DataGridAutoGenerateColumns="True" 一起使用,那么您将只能看到接口中实际定义的属性,而不会看到类中定义的额外属性。另一方面,如果您将该集合数据绑定到ItemsControl.ItemsSource,那么您可以数据绑定到所有属性,即使是那些在实现类中定义的属性。

使用基类您会发现类似的结果。不过,为了避免所有问题,使用ObservableCollection&lt;object&gt; 集合通常是最简单的方法。

【讨论】:

  • 哦,一个对象,为什么我没有尝试过。我会在完成当前任务后尝试一下。
  • 是的,将其设置为普通对象现在非常有效,谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-12-21
  • 2017-07-23
  • 2012-05-26
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多