Silverlight: как связать результат операции load с диаграммой LineSeries, которая содержит несколько нулевых значений - PullRequest
0 голосов
/ 03 ноября 2011

Я привязал свой график к результату операции загрузки.Результат, возвращаемый операцией загрузки, возвращает комплексный тип со значениями для некоторых свойств объекта, равными нулю.

Итак, я получаю сообщение об ошибке в приложении Silver Light.

Код моего XAMLвыглядит следующим образом:

<Grid x:Name="LayoutRoot">
        <toolkit:Chart Name="historicalTotalChart" Title="Chart Title">
            <toolkit:LineSeries >

            </toolkit:LineSeries>
        </toolkit:Chart>
    </Grid>

Код моего CS-файла выглядит следующим образом:

LoadOperation<GetHistoricalTotalReport_Result> hisTotalsLoadOp =
                context.Load(context.GetHistoricalToalReportQuery(tableName, sD, startDate, endDate));

            LineSeries line = new LineSeries();
            line.ItemsSource = hisTotalsLoadOp.Entities;

            //line.DependentValuePath ="rep_date";
            //line.IndependentValuePath = "expr1";
            line.DependentValueBinding = new Binding("[rep_date]");
            line.IndependentValueBinding = new Binding("[expr1]");
            line.Title = "Historical Totals";
            historicalTotalChart.Series.Add(line);

Кто-нибудь может сказать, как я могу преодолеть эту ошибку?

rep_date, expr1 - это свойства в моем сложном типе GetHistoricalTotalReport_Result.Я правильно привязываюсь к свойствам?

Любая помощь высоко ценится.

Спасибо

1 Ответ

1 голос
/ 03 ноября 2011

В вашем приложении 3 возможных проблемы:

  1. Ваши привязки не должны содержать квадратных скобок, они предназначены для массивов и словарей. Также я бы предпочел использовать свойства Dependent / IndependentValuePath, вы не должны их комментировать, они полностью правильные.
  2. Свойство DependentValuePath должно иметь числовой тип данных, поскольку оно расположено на оси Y. В вашем примере свойство rep_date может иметь тип double.
  3. IndependentValuePath расположен на оси X и может быть любого типа, но значения не могут содержать нули. На самом деле, я понятия не имею, где на оси X может отображаться нулевое значение, это не имеет смысла.

Вот пример правильного кода, который отлично работает:

LineSeries line = new LineSeries();
line.ItemsSource = new[]
{
    new ItemViewModel{expr1 = "Item1", rep_date = 25},
    new ItemViewModel{expr1 = "Item2", rep_date = null},
    new ItemViewModel{expr1 = "Item3", rep_date = 31},
    new ItemViewModel{expr1 = "Item4", rep_date = null},
};

line.DependentValuePath = "rep_date";
line.IndependentValuePath = "expr1";
line.Title = "Historical Totals";
historicalTotalChart.Series.Add(line);

Следующий код не будет работать:

line.ItemsSource = new[]
{
    new ItemViewModel{expr1 = null, rep_date = 25} //wrong, x-value can't be null
}

Но вы можете отфильтровать свои сущности перед их отображением:

line.ItemsSource = hisTotalsLoadOp.Entities.Where(e => e.expr1 != null).ToList();
...