【问题标题】:How to create a simple Pie chart using Extended WPF Toolkit如何使用扩展 WPF 工具包创建简单的饼图
【发布时间】:2019-02-05 12:06:19
【问题描述】:

我对 C# 开发还很陌生。 我正在尝试使用 Visual Studio、C# 和扩展 WPF 工具包创建一个简单的饼图。下面的代码是我正在尝试构建的 dll 的一部分(Revit 插件)。 我使用 NuGet 安装了扩展的 WPF 工具包。 我找不到任何教程或示例,所以我尝试从我在不同的在线资源上找到的一些片段中放置代码。 目前,我有

xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"

<Grid Grid.Row="1">
        <xctk:Pie x:Name="foobar"
                  DataContext="{Binding PieCollection, UpdateSourceTrigger=PropertyChanged}" >
        </xctk:Pie>
    </Grid>

public class PiePoint
{
    public string Name { get; set; }
    public Int16 Share { get; set; }
}

public class CompareToMultiLODViewModel : INotifyPropertyChanged
{
private ObservableCollection<PiePoint> _pieCollection;

    public ObservableCollection<PiePoint> PieCollection
    {
        get { return _pieCollection; }
        set { _pieCollection = value; OnPropertyChanged("PieCollection"); }
    }
public CompareToMultiLODViewModel()
    {
        CompareToMultiLODBtnCommand = new MRCommand(this);

        PieCollection = new ObservableCollection<PiePoint>();
        PieCollection.Add(new PiePoint { Name = "Mango", Share = 10 });
        PieCollection.Add(new PiePoint { Name = "Banana", Share = 36 });
    }

    private PropertyChangedEventHandler _PropertyChanged;

    event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
    {
        add
        {
            //((INotifyPropertyChanged)PieCollection).PropertyChanged += value;
            _PropertyChanged += value;
        }

        remove
        {
            //((INotifyPropertyChanged)PieCollection).PropertyChanged -= value;
            _PropertyChanged -= value;
        }
    }

    private void OnPropertyChanged(string PropertyName)
    {
        _PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
    }

xaml 后面的代码是

    public partial class CompareToMultiLOD : Page
{
    public CompareToMultiLOD()
    {
        InitializeComponent();

        DataContext = new CompareToMultiLODViewModel();
    }

我不知道它是否相关,但是在调试时我看到在创建 PieCollection 之前分配了 DataContext,然后在 PieCollection 初始化时触发了一次 OnPropertyChanged。 PropertyChanged 似乎被触发了一次(我不明白,因为我添加了两个值)。

我不确定 ViewModel 是存储饼图使用的数据的正确位置,但我暂时将它放在那里(因为它显然是一个模拟类)。

目前我只想让它工作。 任何帮助表示赞赏!

【问题讨论】:

    标签: c# wpf wpftoolkit toolkit xceed


    【解决方案1】:

    Pie 并不是真正的数据系列图表,而是代表椭圆的单个部分的形状:https://github.com/xceedsoftware/wpftoolkit/wiki/PieChart

    如果您想要一个饼图,您应该查看this NuGet packagethis 的答案,了解如何使用它来创建饼图的示例。

    这应该给你一个饼图:

    xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
    ...
    <Grid Grid.Row="1">
        <chartingToolkit:Chart Margin="0" Title="Chart Title" DataContext="{Binding PieCollection}">
            <chartingToolkit:PieSeries ItemsSource="{Binding}" 
                                       DependentValuePath="Share" 
                                       IndependentValuePath="Name">
            </chartingToolkit:PieSeries>
        </chartingToolkit:Chart>
    </Grid>
    

    【讨论】:

    • 非常感谢您指出这一点,这个名称完全具有误导性。是否真的推荐使用 WPF 工具包,因为上次更新是 7 年多前?对于一个框架,对我来说这听起来像恐龙一样古老。
    • @MarijaRakic:要求推荐或查找工具或软件库的问题对于 Stack Overflow 来说是题外话,因为它们是基于意见的。
    • 我明白了。更奇怪的是为什么没有更新、更受欢迎的图书馆。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多