Круговая диаграмма XAML Binding - PullRequest
2 голосов
/ 22 мая 2011

Я использую MVVM и SL4.У меня есть коллекция VoteResults, которые привязаны к ItemsControl.Я хочу PieChart в КАЖДОМ элементе VoteResult.Свойства объекта элемента VoteResult выглядят так: VotedYes 10;Проголосовал № 4;Воздержался 2;DidntVote 6;

Как передать эти значения свойств VoteItem для построения серии ItemSource круговой диаграммы в XAML?Что-то вроде:

 <charting:Chart>
    <charting:Chart.Series>
       <charting:PieSeries>
          <charting:PieSeries.ItemsSource>
             <controls:ObjectCollection>

             </controls:ObjectCollection>
          </charting:PieSeries.ItemsSource>
       </charting:PieSeries>
    </charting:Chart.Series>
 </charting:Chart>

1 Ответ

2 голосов
/ 23 мая 2011

Элементы управления диаграммами предназначены для представления данных, которые были обработаны и агрегированы и готовы к представлению.

Похоже, вы хотите, чтобы PieSeries представлял серию, содержащую категории "VotedYes", "VotedNo", «Воздержался» и «Не голосовал» как его независимая ценность, а подсчет голосов - как зависимая.В этом случае вам нужно передать в ItemsSource коллекцию, содержащую этот набор данных, один объект не подойдет.

Вам нужно будет передать объект VoteResult через функцию, которая возвращает что-то вроде IEnumerable<KeyValuePair<String, Int32>>.

 public IEnumerable<KeyValuePair<String, Int32>> ProcessVoteResult(VoteResult vr)
 {
      yield return new KeyValuePair<String, In232>("Voted Yes", vr.VotedYes);
      yield return new KeyValuePair<String, In232>("Voted No", vr.VotedNo);
      yield return new KeyValuePair<String, In232>("Abstained", vr.Abstained);
      yield return new KeyValuePair<String, In232>("Did Not Vote ", vr.DidntVote );
 }

Теперь вы, вероятно, захотите связать VoteResult, так как вы, похоже, используете MVVM (из ваших других вопросов).Вам понадобится конвертер значений: -

 public class VoteResultToEnumerableConverter
 {
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
         if (value != null)
         {
              return ProcessVoteResult((VoteResult)value);
         }
         return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
         throw new NotImplementedException();
    }
 }

Тогда этот конвертер будет находиться в статических ресурсах где-то над диаграммой: -

 <local:VoteResultToEnumerableConverter x:Key="vrconv" />

Тогда ваша диаграмма будет выглядеть следующим образом:-

 <toolkit:Chart>
     <toolkit:PieSeries
         ItemsSource="{Binding SomeVoteResult, Converter={StaticResource vrconv}}"
         DependentValuePath="Key"
         IndependendValuePath="Value"/>
 </toolkit:Chart>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...