簡體   English   中英

XAML列表 <LineSeries> 綁定到圖表系列

[英]XAML List<LineSeries> binding to chart Series

我有帶有工具箱圖表的MVVM silverlight應用程序。 在視圖模型中,我創建了ObservableCollection屬性:

    private ObservableCollection<LineSeries> _lines = new ObservableCollection<LineSeries>();
    public ObservableCollection<LineSeries> Lines
    {
        get { return _lines; }
        set
        {
            _lines = value;
            NotifyPropertyChanged("Lines");
        }
    }

然后以某種方法用動態計數線填充此集合:

            List<SolidColorBrush> colors = BS2ColorSetHelper.GetSetColors();
            for (int i = 0; i < remainderData.Count; i++)
            {
                LineSeries line = (colors.ElementAtOrDefault(i) != null)
                    ? CreateNewLineSeriesWithColor(remainderData[i].DenominationName, remainderData[i].Coords, colors[i])
                    : CreateNewLineSeries(remainderData[i].DenominationName, remainderData[i].Coords);

                line.Name = remainderData[i].DenominationName;
                Lines.Add(line);
            }
            .........

現在,我想將此ObservableCollection綁定到工具箱圖表系列。

    <toolkit:Chart Name="chart">
        <toolkit:Chart.Series>
            ????
        </toolkit:Chart.Series>
    </toolkit:Chart>

我努力了

系列=“ {裝訂路徑=線}”

但這不起作用。 Visual Studio顯示錯誤:無法將類型為'System.Windows.Data.Binding'的對象轉換為類型為'System.Collections.ObjectModel.Collection`1 [System.Windows.Controls.DataVisuali‌zation.Charting.ISeries]'。 我認為這是因為Series不是依賴屬性。

我不完全了解有關控件Chart的信息,我建議您檢查控件創建者提供的文檔以找出可綁定屬性的名稱。

但是從您發布的內容來看,我的猜測是嘗試:

<toolkit:Chart Name="chart" Series={Binding Lines}/>

猜測您的Datacontext已經就位。 意味着頁面的數據上下文已設置為您的視圖模型

好的,我們不能將LineSeries綁定到Series,因為Series不是Dependency屬性。 因此,我們可以使用以下依賴項屬性創建新的UserControl:

public class MultiChart : Chart
{
    public IEnumerable SeriesSource
    {
        get
        {
            return (IEnumerable)GetValue(SeriesSourceProperty);
        }
        set
        {
            SetValue(SeriesSourceProperty, value);
        }
    }

    public static readonly DependencyProperty SeriesSourceProperty = DependencyProperty.Register(
        name: "SeriesSource",
        propertyType: typeof(IEnumerable),
        ownerType: typeof(MultiChart),
        typeMetadata: new PropertyMetadata(
            defaultValue: default(IEnumerable),
            propertyChangedCallback: new PropertyChangedCallback(OnSeriesSourceChanged)
        )
    );

    private static void OnSeriesSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        IEnumerable newValue = (IEnumerable)e.NewValue;
        MultiChart source = (MultiChart)d;

        source.Series.Clear();

        foreach (LineSeries item in newValue)
        {
            source.Series.Add(item);
        }
    }
}

然后,我們將LineSeries綁定到新創建的屬性:

    <common:MultiChart Name="chart"
                       Title="{Binding Path=Title}"
                       SeriesSource="{Binding Path=Lines}" />

視圖模型將是:

public class ChartDenominationViewModel : ViewModel
{
    private string _title;

    public string Title
    {
        get { return _title; }
        set
        {
            _title = value;
            NotifyPropertyChanged("Title");
        }
    }

    private ObservableCollection<LineSeries> _lines = new ObservableCollection<LineSeries>();

    public ObservableCollection<LineSeries> Lines
    {
        get { return _lines; }
        set
        {
            _lines = value;
            NotifyPropertyChanged("Lines");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM