Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

WPF及Silverlight版Chart支持MVVM(模型-视图-ViewModel)设计模式。整个图表可以被声明式地通过源生的绑定技术绑定到XAML。下面的步骤演示了如何在一个MVVM架构的WPF或Silverlight应用程序中使用C1Chart(在线文档 'C1Chart 类')。

  1. 创建一个新类命名为Sale,实现INotifyPropertyChanged接口。

    C#

    public class Sale : INotifyPropertyChanged
    { private string _product; private double _value; private double _discount; public Sale(string product, double value, double discount) {
    Product = product;
    Value = value;
    Discount = discount; } public string Product
    { get { return _product; } set { if (_product != value)
    {
    _product = value;
    OnPropertyChanged("Product");
    }
    } } public double Value

    { get { return _value; } set { if (_value != value)
    {
    _value = value;
    OnPropertyChanged("Value");
    }
    } } public double Discount
    { get { return _discount; } set { if (_discount != value)
    {
    _discount = value;
    OnPropertyChanged("Discount");
    }
    } } public event PropertyChangedEventHandler PropertyChanged; void OnPropertyChanged(string propertyName)
    {
    if (PropertyChanged != null)
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    }

  2. 创建一个新的类并命名为SaleViewModel。这将做为包含C1Chart的View的数据上下文。

    C#

    public class SaleViewModel : INotifyPropertyChanged
    { private ObservableCollection<Sale> _sales = new ObservableCollection<Sale>
    (); public SaleViewModel()
    {
    //加载数据
    LoadData(); } public ObservableCollection<Sale> Sales
    { get { return _sales; }
    } public void LoadData()
    {
    //TODO: 从数据源加载数据

    _sales.Add(new Sale("Bikes", 23812.89, 12479.44));
    _sales.Add(new Sale("Shirts", 79752.21, 19856.86));
    _sales.Add(new Sale("Helmets", 63792.05, 16402.94));
    _sales.Add(new Sale("Pads", 30027.79, 10495.43));
    } public event PropertyChangedEventHandler PropertyChanged; void OnPropertyChanged(string propertyName)
    {
    if (PropertyChanged != null)
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    }

    该类将包含一个ObservableCollection,Sales,以及生成模拟数据的初始化方法。
  3. 切换到源代码视图并创建一个新的WPF或者Silverlight的用户控件,并命名为 SaleView.xaml。在LayoutRoot Grid 之前添加以下XAML:

    XAML

    <UserControl.Resources>
    <local:SaleViewModel x:Key="viewModel" />
    </UserControl.Resources>
    <UserControl.DataContext>
    <Binding Source="{StaticResource viewModel}"/>
    </UserControl.DataContext>

    该XAML声明了一个SalesViewModel做为资源,并设置其为UserControl的DataContext。在运行时,View将被绑定到ViewModel。在View中的控件可以绑定到ViewModel的公共属性。
  4. 向页面添加一个C1Chart控件。
  5. 替换C1Chart默认的XAML为以下代码:

    XAML

    <c1:C1Chart ChartType="Column" Name="c1Chart1" Palette="Module">
    <c1:C1Chart.Data>
    <c1:ChartData ItemsSource="{Binding Sales}" ItemNameBinding="{Binding Product}">
    <c1:DataSeries Label="Value" ValueBinding="{Binding Value}" />
    <c1:DataSeries Label="Discount" ValueBinding="{Binding Discount}" />
    </c1:ChartData>
    </c1:C1Chart.Data>
    <c1:C1ChartLegend />
    </c1:C1Chart>

    该XAML定义了一个具有两个数据系列的C1Chart。该ChartData的ItemsSource设置为一个Sales对象的集合,该集合暴露在ViewModel上。每个DataSeries 都有其ValueBinding 属性设置并设置ItemNameBinding 以沿x轴展示我们的产品名称。

    注意注意:如果你使用的是XYDataSeries,那么你应该指定每个系列的XValueBinding,而不应该设置
    ItemNameBinding。

  6. 打开App.xaml.cs应用程序配置文件并将Application_Startup 事件,替换为以下代码:

    Example Title

    private void Application_Startup(object sender, StartupEventArgs e)
    { this.RootVisual = new Views.SaleView();
    }

    该代码设置RootVisual以便在启动时显示SalesView。
  7. 运行应用程序并观察到C1Chart 已经绑定到ViewMode上的Sales数据。

  • No labels