Как создать простую круговую диаграмму с помощью расширенного набора инструментов WPF

Я довольно новичок в разработке С#. Я пытаюсь создать простую круговую диаграмму, используя Visual Studio, С# и расширенный набор инструментов WPF. Следующий код является частью dll, которую я пытаюсь создать (подключается к Revit). Я установил расширенный набор инструментов WPF с помощью NuGet. Я не смог найти никакого учебника или примеров, поэтому я попытался разместить код из некоторых фрагментов, которые я нашел в разных онлайн-источниках. На данный момент у меня есть

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();
    }

Я не знаю, актуально ли это, но при отладке я вижу, что DataContext назначается до создания PieCollection, а затем OnPropertyChanged запускается один раз при инициализации PieCollection. PropertyChanged, кажется, запускается один раз (чего я не понимаю, так как я добавляю два значения).

Я не уверен, что ViewModel - это подходящее место для хранения данных, которые использует круговая диаграмма, но я поместил их туда временно (поскольку это, очевидно, фиктивный класс).

На данный момент я просто хотел бы заставить его работать. Любая помощь приветствуется!


person Marija Rakic    schedule 05.02.2019    source источник


Ответы (1)


Pie на самом деле не диаграмма с рядом данных, а форма, представляющая собой одну часть эллипса: https://github.com/xceedsoftware/wpftoolkit/wiki/PieChart.

Если вам нужна круговая диаграмма, взгляните на этот пакет NuGet и < href="https://stackoverflow.com/questions/31841953/binding-pie-chart-with-wpf-toolkit-not-showing-points">этот ответ для примера того, как его использовать для создать круговую диаграмму.

Это должно дать вам круговую диаграмму:

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>
person mm8    schedule 05.02.2019
comment
Большое спасибо за указание на это, имя было совершенно вводящим в заблуждение. Действительно ли рекомендуется использовать инструментарий WPF, поскольку последнее обновление было более 7 лет назад? Для фреймворка это звучит так же старо, как динозавры. - person Marija Rakic; 05.02.2019
comment
@MarijaRakic: Вопросы с просьбой порекомендовать или найти инструмент или библиотеку программного обеспечения не относятся к теме Stack Overflow, поскольку они основаны на мнениях. - person mm8; 05.02.2019
comment
Я понимаю. Было скорее удивительно, почему нет более новой и популярной библиотеки. Большое спасибо! - person Marija Rakic; 06.02.2019