ObservableCollection作为DependenceProperty和绑定问题

时间:2011-10-20 07:59:44

标签: c# wpf xaml binding dependency-properties

我已经创建了一个Chart控件,过了一段时间我决定为它添加multiserie功能。我使用类型ObservableCollection<ChartSerie>的依赖属性实现了该功能,如下所示:

private static DependencyPropertyKey SeriesPropertyKey = DependencyProperty.RegisterReadOnly("Series", typeof(ObservableCollection<ChartSerie>), typeof(Chart), new FrameworkPropertyMetadata(new ObservableCollection<ChartSerie>()));
public static DependencyProperty SeriesProperty = SeriesPropertyKey.DependencyProperty;

我使用XAML中的这个属性来调用它:

    <chart:Chart>
        <chart:Chart.Series>
            <chart:ChartSerie Data="{Binding ChartData1}"/>
            <chart:ChartSerie Data="{Binding ChartData2}" />
        </chart:Chart.Series>
    </chart:Chart>

ChartSerie代码只是ChartData的一个容器:

public static DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof(ObservableCollection<ChartPoint>), typeof(ChartSerie), new FrameworkPropertyMetadata(OnDataChanged));

我面临的问题是ChartSerie实例没有填充来自绑定的数据。它们的Data属性始终设置为null。我在visual studio的输出端没有绑定错误。

提前致谢。

编辑:挖掘后看起来有一个真正的绑定问题。看起来图表的DataContext不是ChartSerie继承的。 ChartSerie是一个FrameworkElement,以防万一重要

1 个答案:

答案 0 :(得分:1)

我记得,您需要定义自己的非泛型集合,而不是公开泛型ObservableCollection<Whatever>

public class ChartSeriesCollection : ObservableCollection<ChartSeries>
{
}

...

public static readonly DependencyProperty ChartSeriesProperty = DependencyProperty.Register(
    "ChartSeries",
    typeof(ChartSeriesCollection),
    typeof(MyClass));

如果你不这样做,事情会变得非常奇怪。