2

我正在尝试在我的新 Win8 C#/XAML 商店应用程序中使用来自 SyncFusion WinRT Studio 的饼图,但我不知道如何在图表上设置数据。我的页面上有图表,并尝试了我能找到的一切来设置数据以显示内容,但我无法让它工作。示例应用程序没有太大帮助,因为它们的页面中有 0 个代码,我不知道有什么不同。下面的图表直接从他们的示例中复制而来,但在我的应用程序中不起作用。任何人都有在 WinRT 应用程序中使用 SyncFusion 图表的示例吗?

XAML 中的图表:

      <Grid Margin="30,15,30,30" x:Name="ChartGrid">
        <Grid.Resources>
          <local:Labelconvertor x:Key="labelconverter"/>
          <Style TargetType="Line" x:Key="lineStyle">
            <Setter Property="StrokeThickness" Value="0"/>
          </Style>
          <DataTemplate x:Key="labelTemplate">
            <TextBlock Margin="10,0,0,0" Text="{Binding Converter={StaticResource labelconverter}}" FontSize="26" FontFamily="Segoe UI" FontWeight="Light" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Top" Opacity="0.5"></TextBlock>
          </DataTemplate>
          <DataTemplate x:Key="legend">
            <StackPanel Orientation="Horizontal">
              <Grid Margin="10,0,0,0">
                <Grid.ColumnDefinitions>
                  <ColumnDefinition/>
                  <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Rectangle Width="15" Height="15" Fill="{Binding Interior}"></Rectangle>
                <TextBlock Margin="10,5,5,0" Grid.Column="1" Text="{Binding Item.Expense}"></TextBlock>
              </Grid>
            </StackPanel>
          </DataTemplate>
        </Grid.Resources>
        <Grid.DataContext>
          <local:PieChartViewModel/>
        </Grid.DataContext>
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"></RowDefinition>
          <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Margin="0,0,0,20">
        </StackPanel>
        <chart:Chart x:Name="ScatterChart" AreaBorderThickness="0" HorizontalAlignment="Center" Grid.RowSpan="2" Visibility="Visible">
          <chart:Chart.Header>
            <TextBlock FontSize="20" FontFamily="Segoe UI" Margin="0,20,0,10">Agriculture Expenses Comparison</TextBlock>
          </chart:Chart.Header>
          <chart:Chart.PrimaryAxis>
            <chart:ChartAxis></chart:ChartAxis>
          </chart:Chart.PrimaryAxis>
          <chart:Chart.SecondaryAxis>
            <chart:ChartAxis></chart:ChartAxis>
          </chart:Chart.SecondaryAxis>
          <chart:Chart.Legend>
            <chart:ChartLegend  CornerRadius="0" ItemTemplate="{StaticResource legend}" CheckBoxVisibility="Visible" BorderThickness="1">
            </chart:ChartLegend>
          </chart:Chart.Legend>
          <chart:PieSeries ItemsSource="{Binding Expenditure}" XBindingPath="Expense" x:Name="pieSeries" ExplodeAll="{Binding Path=IsChecked,ElementName=chkExplode}" ExplodedRadius="{Binding Path=Value,ElementName=slRadius}" Palette="Metro" Label="Expenditures" YBindingPath="Amount">
            <chart:PieSeries.AdornmentsInfo>
              <chart:ChartAdornmentInfo AdornmentsPosition="Bottom"  HorizontalAlignment="Center" VerticalAlignment="Center" ConnectorLineStyle="{StaticResource lineStyle}" ShowConnectorLine="True" ConnectorHeight="30" ShowLabel="True"  LabelTemplate="{StaticResource labelTemplate}" SegmentLabelContent="YValue">
              </chart:ChartAdornmentInfo>
            </chart:PieSeries.AdornmentsInfo>
          </chart:PieSeries>
        </chart:Chart>
      </Grid>
    </StackPanel>
  </Grid>

从 LoadState 函数调用的代码隐藏:(我已经尝试了所有这些选项,但它们都不起作用......)

  PieChartViewModel pvm = new PieChartViewModel();
  this.DefaultViewModel["PieChartViewModel"] = pvm;
  this.DefaultViewModel["DataContext"] = pvm;
  this.DefaultViewModel["Items"] = pvm;
  this.DefaultViewModel["DefaultViewModel"] = pvm;
  this.ScatterChart.DataContext = pvm;
  this.ChartGrid.DataContext = pvm;

对象定义:

public class PieChartViewModel
{
  public PieChartViewModel()
  {
    this.Expenditure = new List<CompanyExpense>();
    Expenditure.Add(new CompanyExpense() { Expense = "Seeds", Amount = 20d });
    Expenditure.Add(new CompanyExpense() { Expense = "Fertilizers", Amount = 23d });
    Expenditure.Add(new CompanyExpense() { Expense = "Insurance", Amount = 12d });
    Expenditure.Add(new CompanyExpense() { Expense = "Labor", Amount = 28d });
    Expenditure.Add(new CompanyExpense() { Expense = "Warehousing", Amount = 10d });
    Expenditure.Add(new CompanyExpense() { Expense = "Taxes", Amount = 10d });
    Expenditure.Add(new CompanyExpense() { Expense = "Truck", Amount = 10d });
  }
  public IList<CompanyExpense> Expenditure
  {
    get;
    set;
  }
}
public class CompanyExpense
{
  public string Expense { get; set; }
  public double Amount { get; set; }
}
4

1 回答 1

1

我能够毫无问题地使用相同的数据填充饼图。请在PieChartDemo中找到示例

这是解释如何配置饼图的文档:PieChartHelp

以下是用于为生成 PieSeries 提供数据的三个 API,

  1. ItemsSource- 您可以使用此属性提供数据源。任何 IEnumerable 都可以作为数据源。
  2. XBindingPath- 用于提供源对象中类别数据的路径。
  3. YBindingPath- 用于提供源对象中数值数据的路径。
于 2012-12-10T09:27:03.530 回答