WPF Toolkit Charting和IndependentValueBinding,IndependentValuePath

Joe*_*tti 18 wpf charts binding wpftoolkit

我遇到了WPF工具包中的图表引擎问题.

我没有将数据移动到适当的对象模型,因此ItemSource支持一个DataView.

第一次尝试

<chartingToolkit:ScatterSeries x:Name="TargetSeries" 
  DataPointStyle="{StaticResource TargetStyle}"  
  ItemsSource="{Binding Path=TargetSeriesData}"
  IndependentValueBinding="{Binding Path=TargetSeries_X}" 
  DependentValueBinding="{Binding Path=TargetSeries_X}" />
Run Code Online (Sandbox Code Playgroud)

这崩溃是因为我认为绑定被认为是情节的值或某种不匹配.

第二次尝试

<chartingToolkit:ScatterSeries x:Name="TargetSeries" 
  DataPointStyle="{StaticResource TargetStyle}" 
  ItemsSource="{Binding Path=TargetSeriesData}"
  IndependentValuePath="{Binding Path=TargetSeries_X}"
  DependentValuePath="{Binding Path=TargetSeries_X}" />
Run Code Online (Sandbox Code Playgroud)

此崩溃发生在初始化步骤期间,因为Path属性不支持依赖项属性,因此无法绑定.

第三次尝试

<chartingToolkit:ScatterSeries x:Name="TargetSeries" 
  DataPointStyle="{StaticResource TargetStyle}"  
  ItemsSource="{Binding Path=TargetSeriesData}"
  IndependentValuePath="targetFooXColumnName" 
  DependentValuePath="targetFooYColumnName" />
Run Code Online (Sandbox Code Playgroud)

现在这个有效!但我想使用绑定,所以我可以从使用targetFooXColumnName到切换targetFooBarXColumnName.因此,此解决方案将导致大量hacky外观代码手动切换路径.

有没有办法来解决这个问题?我可以使用某种转换器来获取Binding属性以正确地从DataView中的列中提取数据吗?

谢谢,乔尔

小智 1

我认为您的应用程序崩溃的原因是“您尚未将数据移动到正确的对象模型”

我可以尝试在 ScatterSeries 中绑定它的工作而不会崩溃:就像

<Grid Name="grid_Sample" Loaded="grid_Sample_Loaded">
    <DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart"
       Width="400" Height="250"
       Background="LightSteelBlue">
        <DVC:Chart.Series>
            <DVC:ScatterSeries x:Name="TargetSeries" 
                             ItemsSource="{Binding sampleList}"
      IndependentValueBinding="{Binding Path=TargetSeries_X}"
        DependentValueBinding="{Binding Path=TargetSeries_Y}">
    </DVC:ScatterSeries>
        </DVC:Chart.Series>
    </DVC:Chart>
</Grid>

 private void grid_Sample_Loaded(object sender, RoutedEventArgs e)
    {
        sampleList = new ObservableCollection<SampleTest>() { 
            new SampleTest(){TargetSeries_X=20,TargetSeries_Y=50},
        new SampleTest(){TargetSeries_X=25,TargetSeries_Y=60},
        new SampleTest(){TargetSeries_X=30,TargetSeries_Y=50},
        new SampleTest(){TargetSeries_X=40,TargetSeries_Y=60}
        };
        ((ScatterSeries)mcChart.Series[0]).ItemsSource = sampleList; 
    }
Run Code Online (Sandbox Code Playgroud)

根据我的知识,请尝试使用正确的模型将 ItemsSource 绑定到 ScatterSeries。