【问题标题】:Pie Chart XAML Binding饼图 XAML 绑定
【发布时间】:2011-08-30 14:59:25
【问题描述】:

我正在使用 MVVM 和 SL4。我有一组绑定到 ItemsControl 的 VoteResults。我想要每个 VoteResult 项目中的饼图。 VoteResult 项目对象属性如下所示: VotedYes 10;投票第 4 名;弃权 2;没有投票 6;

如何传递这些 VoteItem 属性值以在 XAML 中构建饼图的系列 ItemSource? 类似的东西:

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

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

【问题讨论】:

  • “一个饼图 in 每个..”?你的意思是你想要每个都有多个饼图吗?也许这听起来没有那么有用。你的意思是?您是否真的有多个 VoteResult 项目,或者您是否将单个 VoteResult 的每个属性称为“项目”。请准确地说,我们花了很多时间与我们的计算机交谈,而这种方式出于必要性需要精确。因此,我们最终也更喜欢精确地相互交谈,以免产生歧义。
  • A VoteResult(单数)包含 4 个可能响应中的每一个的计数:是;不 ;弃权和没有投票。但是,可以对多个投票做出响应:VoteResultA、VoteResultB、VoteResultC 以响应 VoteA、VoteB、VoteC 等。ItemsControl 绑定到这些响应的集合。我需要将每个 VoteResult(单数)的 4 个可能的答案(Yes、No、Abstain 和 DidtVote)绑定到饼图。

标签: silverlight xaml data-binding mvvm


【解决方案1】:

图表控件旨在呈现已处理和汇总的数据以供呈现。

在我看来,您希望 PieSeries 呈现一个系列,其中包含类别“VotedYes”、“VotedNo”、“弃权”和“未投票”作为其独立值,而投票计数作为依赖值。在这种情况下,您需要将包含这组数据的集合传递给 ItemsSource,单个对象是不行的。

您需要通过返回类似IEnumerable&lt;KeyValuePair&lt;String, Int32&gt;&gt; 的函数来传递 VoteResult 对象。

 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>

【讨论】:

  • 你打败了我,我正要写一个“令人惊讶”的类似答案;)我刚刚刷新了页面,找到了你的答案,赞 :)
  • 抱歉 - 解释不明确。是的,你的答案看起来像我想要的。 VoteResults 的集合,每个 VoteResult 项都有一个饼图。
  • 更具体。我正在使用 MVVM,并且在 ItemsSource 绑定到的视图模型中已经有一个 VoteResults(集合)属性。我的目标是使用此绑定向饼图提供数据,因为数据已经在 VoteResult(单数)属性中。
  • 格式化程序如何:返回ProcessVoteResult((VoteResult)value);访问视图模型中的 IEnumerable> ProcessVoteResult(VoteResult vr)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2014-03-06
相关资源
最近更新 更多