wpf中的图表绑定 [英] Chart binding in wpf
问题描述
我有很大的问题绑定堆叠列系列到我的图表。
i have big problem with binding Stacked Column Series to my chart.
我有ViewModel中的公共ObservableCollection系列属性,尝试通过多种方式,但它仍然不工作。
I have public ObservableCollection Series property in my ViewModel and try by many ways but it still not working.
这是来自ViewModel的代码来准备系列:private void drawChart(){this.Series.Clear();
This is code from ViewModel to prepare Series: private void drawChart() { this.Series.Clear();
var dataValues = new List<List<SimpleDataValue>>();
int wartoscNiezalezna = 1;
for (int i = 0; i < 2; i++)
{
dataValues.Add(new List<SimpleDataValue>());
}
foreach (var item in myCollection)
{
var param = someparam;
dataValues[0].Add(new SimpleDataValue { IndependentValue = "Czujnik " + wartoscNiezalezna, DependentValue = 100 });
//czerwone
dataValues[1].Add(new SimpleDataValue { IndependentValue = "" + wartoscNiezalezna, DependentValue = 200 });
wartoscNiezalezna++;
}
var stackedSeries = Activator.CreateInstance(typeof(StackedColumnSeries)) as DefinitionSeries;
int itemnr=0;
foreach (var item in dataValues)
{
var definicja = new SeriesDefinition();
if(itemnr==0)
definicja.Title = "Stan 1";
else
definicja.Title = "Stan 2";
definicja.DependentValuePath = "DependentValue";
definicja.IndependentValuePath = "IndependentValue";
definicja.ToolTip = "asdas";
definicja.ItemsSource = item;
stackedSeries.SeriesDefinitions.Add(definicja);
itemnr++;
}
Series.Add(stackedSeries);
}
我无法绑定到:
<charting:Chart x:Name="MyChart" Padding="10,10,10,10">
<charting:Chart.Series>
<charting:StackedColumnSeries>
<charting:SeriesDefinition ItemsSource="{Binding Series}" DependentValuePath="DependentValue" IndependentValuePath="IndependentValue">
</charting:SeriesDefinition>
</charting:StackedColumnSeries>
</charting:Chart.Series>
</charting:Chart>
我尝试使用SeriesDefinitions Collection和其他。我将非常感谢一些帮助。
I was trying with SeriesDefinitions Collection and others. I will be very grateful to some help.
推荐答案
我找不到 StackedColumnSeries
在WPF中,所以我将使用Silverlight。我看到你在代码中创建 SeriesDefinition
,在这种情况下没有点绑定,这里是正确的代码:
I can't find StackedColumnSeries
in WPF so I will use Silverlight. As I see you create SeriesDefinition
in code, in that case there is no point in binding, here is correct code:
Xaml without chart series:
Xaml without chart series:
<charting:Chart x:Name="MyChart" Padding="10,10,10,10" />
代码背后:
public class SimpleDataValue
{
public string IndependentValue { get; set; }
public int DependentValue { get; set; }
}
public partial class MainPage : UserControl
{
private int[] myCollection = new int[10];
private List<DefinitionSeries> Series = new List<DefinitionSeries>();
public MainPage()
{
InitializeComponent();
this.drawChart();
this.Series.ForEach(this.MyChart.Series.Add);
}
private void drawChart()
{
this.Series.Clear();
this.Series = new List<DefinitionSeries>();
var dataValues = new List<List<SimpleDataValue>>();
int wartoscNiezalezna = 1;
for (int i = 0; i < 2; i++)
{
dataValues.Add(new List<SimpleDataValue>());
}
foreach (var item in myCollection)
{
dataValues[0].Add(new SimpleDataValue { IndependentValue = "Czujnik " + wartoscNiezalezna, DependentValue = 100 });
//czerwone
dataValues[1].Add(new SimpleDataValue { IndependentValue = "" + wartoscNiezalezna, DependentValue = 200 });
wartoscNiezalezna++;
}
var stackedSeries = Activator.CreateInstance(typeof(StackedColumnSeries)) as DefinitionSeries;
int itemnr = 0;
foreach (var item in dataValues)
{
var definicja = new SeriesDefinition();
if (itemnr == 0)
definicja.Title = "Stan 1";
else
definicja.Title = "Stan 2";
definicja.DependentValuePath = "DependentValue";
definicja.IndependentValuePath = "IndependentValue";
ToolTipService.SetToolTip(definicja, "asdas");
definicja.ItemsSource = item;
stackedSeries.SeriesDefinitions.Add(definicja);
itemnr++;
}
Series.Add(stackedSeries);
}
}
你的问题以这种方式,因为 ViewModel
不能包含任何形式的视图:
What about me, I would solve your problem in this way, because ViewModel
mustn't contains anything form the View:
Xaml
<charting:Chart x:Name="MyChart" Padding="10,10,10,10">
<charting:Chart.Series>
<charting:StackedColumnSeries>
<charting:SeriesDefinition Title="Stan 1" ItemsSource="{Binding FirstCollection}" DependentValuePath="DependentValue" IndependentValuePath="IndependentValue" />
<charting:SeriesDefinition Title="Stan 2" ItemsSource="{Binding SecondCollection}" DependentValuePath="DependentValue" IndependentValuePath="IndependentValue" />
</charting:StackedColumnSeries>
</charting:Chart.Series>
</charting:Chart>
代码隐藏
public class ChartModel
{
public List<SimpleDataValue> FirstCollection { get; set; }
public List<SimpleDataValue> SecondCollection { get; set; }
}
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.MyChart.DataContext = new ChartModel
{
FirstCollection = Enumerable.Range(1, 10).Select(i => new SimpleDataValue { IndependentValue = "Czujnik " + i, DependentValue = 100 }).ToList(),
SecondCollection = Enumerable.Range(1, 10).Select(i => new SimpleDataValue { IndependentValue = "" + i, DependentValue = 200 }).ToList()
};
}
}
这篇关于wpf中的图表绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!