Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAML列表<;LineSeries>;绑定到图表系列_C#_Xaml_Mvvm_Charts_Toolkit - Fatal编程技术网

C# XAML列表<;LineSeries>;绑定到图表系列

C# XAML列表<;LineSeries>;绑定到图表系列,c#,xaml,mvvm,charts,toolkit,C#,Xaml,Mvvm,Charts,Toolkit,我有带工具箱图表的MVVM silverlight应用程序。 在视图模型中,我创建了ObservableCollection属性: private ObservableCollection<LineSeries> _lines = new ObservableCollection<LineSeries>(); public ObservableCollection<LineSeries> Lines { get { re

我有带工具箱图表的MVVM silverlight应用程序。 在视图模型中,我创建了ObservableCollection属性:

    private ObservableCollection<LineSeries> _lines = new ObservableCollection<LineSeries>();
    public ObservableCollection<LineSeries> Lines
    {
        get { return _lines; }
        set
        {
            _lines = value;
            NotifyPropertyChanged("Lines");
        }
    }
    <common:MultiChart Name="chart"
                       Title="{Binding Path=Title}"
                       SeriesSource="{Binding Path=Lines}" />
private ObservableCollection\u lines=new ObservableCollection();
公共可观测收集线
{
获取{返回_行;}
设置
{
_行=值;
NotifyPropertyChanged(“行”);
}
}
然后在某种方法中,我使用动态计数行填充此集合:

            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);
            }
            .........
List colors=BS2ColorSetHelper.GetSetColors();
for(int i=0;i
现在我想将这个ObservableCollection绑定到toolkit图表系列

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

????
我试过了

Series=“{Binding Path=Lines}”


但它不起作用。Visual Studio显示错误:“System.Windows.Data.Binding”类型的对象无法转换为“System.Collections.ObjectModel.Collection”类型的对象“1[System.Windows.Controls.DataVisuali”‌​.Charting.ISeries]'。我认为这是因为序列不是依赖属性。

我不完全了解控件
图表的相关信息,我建议您查看控件发起人提供的文档,以了解可绑定属性的名称

但从你发布的内容来看,我的猜测是:

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


猜测您的Datacontext已全部就绪。这意味着页面的datacontext已设置为您的viewmodel。好的,我们无法将LineSeries绑定到Series,因为Series不是依赖属性。 因此,我们可以使用以下依赖项属性创建新的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绑定到新创建的属性:

    private ObservableCollection<LineSeries> _lines = new ObservableCollection<LineSeries>();
    public ObservableCollection<LineSeries> Lines
    {
        get { return _lines; }
        set
        {
            _lines = value;
            NotifyPropertyChanged("Lines");
        }
    }
    <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");
        }
    }
}
公共类ChartDeminationViewModel:ViewModel
{
私有字符串\u标题;
公共字符串标题
{
获取{return\u title;}
设置
{
_标题=价值;
通知财产变更(“所有权”);
}
}
私有ObservableCollection _行=新ObservableCollection();
公共可观测收集线
{
获取{返回_行;}
设置
{
_行=值;
NotifyPropertyChanged(“行”);
}
}
}

取决于控件中使用的属性
图表
您可能需要查看makerI尝试过的控件中的文档,但它不起作用。Visual Studio显示错误:“System.Windows.Data.Binding”类型的对象无法转换为“System.Collections.ObjectModel.Collection”“1[System.Windows.Controls.DataVisualization.Charting.ISeries]”类型。我认为这是因为序列不是依赖属性。您必须阅读
toolkit
中的文档才能找到要绑定到的依赖对象的名称