2011-11-03 59 views
0

我有两个WPF工具包图表(列和饼图)。使用DataTemplateSelector动态更改WPF工具包图表类型

< - 柱形图 - >

<DVC:Chart Name="mcChartPie" Title="{Binding ChartName}"  
DataContext="{Binding SelectedChart}"> 
<DVC:Chart.Series> 
<DVC:PieSeries ItemsSource="{Binding Columns}" Title="Some Chart" 
IndependentValueBinding="{Binding Path=Name}" DependentValueBinding="{Binding 
Path=Value}"></DVC:PieSeries> 
</DVC:Chart.Series> 
</DVC:Chart> 

< - 饼图 - >

<DVC:Chart Name="mcChart" Title="{Binding ChartName}"  
DataContext="{Binding SelectedChart}" Style="{DynamicResource Info> 
<DVC:Chart.Series> 
<DVC:ColumnSeries ItemsSource="{Binding Columns}" Title="Some Chart" 
IndependentValueBinding="{Binding Path=Name}" DependentValueBinding="{Binding 
Path=Value}" Background="Black" AnimationSequence="FirstToLast" ></DVC:ColumnSeries> 
</DVC:Chart.Series> 
</DVC:Chart> 

有一个组合框,其允许用户选择图表类型。当用户选择“柱形图类型”时,柱形图模板应该是可见的,并且当用户选择“饼图类型”时,饼图模板应该是可见的。我怎么能通过重写DataTemplateSelector类中的SelectTemplate()方法来做到这一点?

+0

唯一一个方法是创建2个用户控件与2周的DataTemplates并切换它们。如何使用我在这个问题的答案中描述的'DataTemplateSelector'类:http://stackoverflow.com/questions/5309099/changing-the-view-for-a-viewmodel/5310213#5310213。 – vorrtex

+0

谢谢!这真的很有帮助! – user1020800

+0

你能写出与系列类型相匹配的代码吗? –

回答

0

尝试类似这样的操作,只需创建一个新的serie(Pie,Bar,Column,Lines,Area)的简单方法,然后在清除之前在图表控件上加载的serie之后,将图标添加到图表控件中。

问候

void loadPieSerie() 
    { 
     System.Windows.Controls.DataVisualization.Charting.PieSeries pieSerie = new System.Windows.Controls.DataVisualization.Charting.PieSeries(); 
     chartControl.Series.Clear(); 

     List<KeyValuePair<string, int>> valueList= new List<KeyValuePair<string, int>>(); 
     valueList.Add(new KeyValuePair<string, int>("Dogs", 50)); 
     valueList.Add(new KeyValuePair<string, int>("Cats", 20)); 
     valueList.Add(new KeyValuePair<string, int>("Dinosaurs", 30)); 
     pieSerie.DependentValuePath = "Value"; 
     pieSerie.IndependentValuePath = "Key"; 
     pieSerie.ItemsSource = values; 
     chartControl.Series.Add(pieSerie); 
    }