WPF Databinding в коде вопроса - PullRequest
       18

WPF Databinding в коде вопроса

1 голос
/ 16 февраля 2010

У меня есть следующая коллекция, которая служит глобальным хранилищем для группы LineSeries ItemsSources для диаграммы.

public ObservableCollection<ObservableCollection<Data>> AllDataSeries;

Указанная коллекция может время от времени меняться, когда она сбрасывается, я очищаю график от всех серий - и когда он снова заполняется, я добавляю на график столько серий, сколько мне подсказывает AllDataSeries.Count.

На данный момент мне нужно установить привязку.

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);
}

Дело в том, что я понятия не имею, как составить Путь для связывания. Я попробовал:

String.Format("AllDataSeries[{0}]", i)

но это не сработало.

Как установить свойство Path для привязки?

1 Ответ

1 голос
/ 16 февраля 2010

Является ли AllDataSeries фактически полем, а не свойством? Я не думаю, что PropertyPath будет следовать общедоступному полю. В любом случае не рекомендуется открывать открытые поля, поэтому вам, вероятно, следует просто изменить это на:

public ObservableCollection<ObservableCollection<Data>> AllDataSeries
{
    get;
    private set;
}

Но чтобы ответить на ваш вопрос о синтаксисе привязки, я считаю, что ваш синтаксис PropertyPath правильный. Хотя я нервничаю из-за вложенной коллекции ObservableCollection. Лично я бы вообще отказался от связывания и сделал что-то вроде:

series.ItemsSource = AllDataSeries[i];

Не похоже, что изменения в коллекции AllDataSeries в любом случае будут вызывать добавление новых серий.

Вы не забыли установить DataContext диаграммы? При желании вы можете установить свойство Source Binding.

binding.Source = this;

Наконец, вы должны изменить BindingMode на OneWay и удалить UpdateSourceTrigger. Диаграмма предназначена только для чтения, поэтому нет причин для двусторонней привязки.

Надеюсь, это поможет.

...