【问题标题】:WPF Databinding in code question代码问题中的 WPF 数据绑定
【发布时间】:2010-02-15 23:25:11
【问题描述】:

我有以下集合,它用作图表的一组 LineSeries ItemsSources 的全局存储。

public ObservableCollection<ObservableCollection<Data>> AllDataSeries;

所述集合可能会不时更改,当它重置时,我会从所有系列中清除图表 - 当它再次重新填充时,我会在图表中添加 AllDataSeries.Count 告诉我的尽可能多的系列。

此时我需要设置绑定。

for(int i = 0; i < AllDataSeries.Count; i++)
{
     var series = new LineSeries { IndependentValuePath = "X", DependentValuePath = "Y", Title = "SomeSeriesTitle" };

     Binding binding = new Binding("#?????#");
     binding.Mode = BindingMode.TwoWay;
     binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

     series.SetBinding(ListView.ItemsSourceProperty, binding);
     MyChart.Series.Add(series);
}

问题是,我不知道如何为绑定编写路径。我试过了:

String.Format("AllDataSeries[{0}]", i)

但是没有用。

我应该如何在绑定上设置 Path 属性?

【问题讨论】:

    标签: c# wpf data-binding wpftoolkit


    【解决方案1】:

    AllDataSeries 实际上是一个字段而不是一个属性吗?我认为 PropertyPath 不会遵循公共领域。无论如何都不建议公开公共字段,因此您可能应该将其更改为:

    public ObservableCollection<ObservableCollection<Data>> AllDataSeries
    {
        get;
        private set;
    }
    

    但要回答您关于绑定语法的问题,我相信您的 PropertyPath 语法是正确的。虽然我对这样的嵌套 ObservableCollection 感到紧张。就个人而言,我会完全放弃绑定并执行以下操作:

    series.ItemsSource = AllDataSeries[i];
    

    看起来对 AllDataSeries 集合的更改无论如何都不会触发新系列的添加。

    你还记得设置图表的 DataContext 吗?或者,您可以设置 Binding 的 Source 属性。

    binding.Source = this;
    

    最后,您应该将 BindingMode 更改为 OneWay 并删除 UpdateSourceTrigger。图表是只读控件,因此没有理由在那里进行双向绑定。

    希望这会有所帮助。

    【讨论】:

    • 您好,感谢您的详细回复。 AllDataSeries 是一个属性(这里已经过了午夜,我不再想得很清楚了)。我在 series.SetBinding 行中发现了一个错误(它应该是 LinearSeries.ItemsSource 属性,而不是 ListView.ItemsSource)。在 SetBinding 调用 ItemsSource 为空之后,它仍然不起作用。有任何想法吗?我已经设置了图表的 DataContext。
    • 您是否尝试过明确设置绑定的来源?我希望 DataContext 能够传播到该系列,但我对 WPF 工具包中的图表控件没有任何经验。
    • 我还应该重申,您问题的第二段向我表明,您在此处设置绑定并没有真正获得任何东西。当然我想知道为什么绑定也不起作用,但最后我认为在这种情况下你最好设置 ItemsSource = AllDataSeries[i]。
    • 我让它工作了 :) ,以满足您的好奇心 - 我正在处理的是通常包含 40 * 10^6 个项目的项目集合(源可以是循环缓冲区,但通常是连续的)。我正在使用虚拟化算法在 ListView 中显示上述集合中的 N 个项目。每当我更改选择(例如进一步向下滚动 50k 项)时,我都会更新图表以查看我当前正在查看的区域中发生了什么:)
    • 我的好奇心更多地涉及到你是如何工作的。
    猜你喜欢
    • 2011-10-18
    • 2014-05-25
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多