的图表控件都被设计成已processeda并汇总准备演示数据。
听起来对我来说,就像你想让一个PieSeries呈现一系列包含类别“VotedYes”,“VotedNo”,“弃权”和“没有投票”作为其独立值并将投票计数作为依赖值。在这种情况下,您需要将包含这组数据的集合传递给ItemsSource,但单个对象不会这样做。
您需要通过返回类似IEnumerable<KeyValuePair<String, Int32>>
的函数来传递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>
“A PieChart __in__ each ..”?你的意思是你想要为每个饼图添加多个饼图吗?也许不是那听起来不太有用。你什么意思?你真的有多个VoteResult项目吗?或者你是否将一个VoteResult的每个属性都称为“项目”。请准确地说,我们花费了大量的时间与我们的计算机进行交谈,这种方式出于必要的精确性。因此,我们最终倾向于相互精确地交谈,以便不存在歧义。 – AnthonyWJones 2011-05-22 20:22:31
A VoteResult(单数)包含4种可能响应中每一种的计数:是;不;弃权和DidntVote。但是,可以响应多个选票:VoterResultA,VoteResultB,VoteResultC响应VoteA,VoteB,VoteC等。ItemsControl绑定到这些响应的集合。我需要将每个VoteResult(单数)的4个可能答案(Yes,No,Abstain和DidntVote)绑定到饼图。 – Greg 2011-05-22 22:08:15