我是相当新的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,然后OnPropertyChanged触发一旦DataContext的分配,在PieCollection初始化。的PropertyChanged似乎触发一次(我不明白,既然我添加两个值)。
我不知道该视图模型是存储数据的是饼图使用正确的地方,但我把它放在那里temporaly(因为它是一个模拟类,很明显)。
此刻,我只想让它工作。任何帮助表示赞赏!
Pie
是不是真的与数据序列,但一个形状,它表示椭圆形的单个部分的图表:https://github.com/xceedsoftware/wpftoolkit/wiki/PieChart。
如果你想要一个饼图,你应该看一看this NuGet package和this回答如何使用它来创建一个饼图的例子。
这应该给你一个饼图:
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>