WPF Databinding in code question
I'v开发者_开发技巧e got the following collection, which serves as a global storage for a group of LineSeries ItemsSources for a chart.
public ObservableCollection<ObservableCollection<Data>> AllDataSeries;
The said collection may change every now and then, when it's reset I clear the chart from all series - and when it's re-populating again I'm adding as many series to the chart as the AllDataSeries.Count
tells me to.
At this point I need to set the binding.
for(int i = 0; i < AllDataSeries.Count; i++)
{
var series = new LineSeries { IndependentValuePath = "X", DependentValuePath = "Y", Title = "SomeSeriesTitle" };
Binding binding = new Binding("#?????#");
binding.Mode = BindingMode.TwoWay;
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
series.SetBinding(ListView.ItemsSourceProperty, binding);
MyChart.Series.Add(series);
}
The thing is, I have no ide how to compose the Path for the binding. I tried :
String.Format("AllDataSeries[{0}]", i)
but it didn't work.
How should I set the Path property on the binding ?
Is AllDataSeries actually a field and not a property? I don't think PropertyPath will follow a public field. It's not recommended to expose public fields anyway so you should probably just change that to:
public ObservableCollection<ObservableCollection<Data>> AllDataSeries
{
get;
private set;
}
But to answer your question about the binding syntax, I believe your PropertyPath syntax is correct. Though I am nervous about a nested ObservableCollection like that. Personally I would just forego the binding altogether and do something like:
series.ItemsSource = AllDataSeries[i];
It doesn't look like changes to the AllDataSeries collection are going to trigger new series being added anyway.
Did you remember to set the DataContext of the chart? Optionally, you can set the Source property of the Binding.
binding.Source = this;
Finally, you should change BindingMode to OneWay and remove the UpdateSourceTrigger. A chart is a read-only control and so there's no reason to have a two-way binding there.
Hope this helps.
精彩评论