我已经创建了一个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,以防万一重要答案 0 :(得分:1)
我记得,您需要定义自己的非泛型集合,而不是公开泛型ObservableCollection<Whatever>
:
public class ChartSeriesCollection : ObservableCollection<ChartSeries>
{
}
...
public static readonly DependencyProperty ChartSeriesProperty = DependencyProperty.Register(
"ChartSeries",
typeof(ChartSeriesCollection),
typeof(MyClass));
如果你不这样做,事情会变得非常奇怪。