设置 OxyPlot 图表标题
Setting OxyPlot chart title
我正在使用 OxyPlot 显示 WPF/.net 4.5 下的基本 line-Chart,XAML 的相关部分如下所示:
<oxy:Plot Title="{Binding Title}">
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding Points}"/>
<oxy:LineSeries ItemsSource="{Binding Points2}"/>
</oxy:Plot.Series>
<oxy:Plot.Axes>
<oxy:CategoryAxis Position="Bottom" ItemsSource="{Binding Labels}" />
</oxy:Plot.Axes>
</oxy:Plot>
创建图表的代码是这样的:
public class MainViewModel
{
public MainViewModel()
{
this.Title = reader.title;
this.Points = reader.mylist;
this.Points2 = reader.mylist2;
this.Labels = reader.labs;
}
public string Title { get; private set; }
public IList<DataPoint> Points { get; private set; }
public IList<DataPoint> Points2 { get; private set; }
public IList<String> Labels { get; private set; }
}
在另一种方法中根据需要设置和更改属性,基本上就像这样:
public static List<DataPoint> mylist = new List<DataPoint>();
public static List<DataPoint> mylist2 = new List<DataPoint>();
public static List<String> labs = new List<String>();
public static string title;
public void setchart()
{
mylist.Add(new DataPoint(0,5));
mylist.Add(new DataPoint(1,10));
mylist2.Add(new DataPoint(0,30));
mylist2.Add(new DataPoint(1,25));
labs.Add("date1");
labs.Add("date2");
title = "mytitle";
MainWin.myPlot.InvalidatePlot(true);
}
它适用于图表中的线条 (Points, Points2) 和 x-axis 上的标签 (Labels)。但是图表的标题不会更新 - "mytitle" 永远不会作为图表的标题出现,除非我把它写成
this.Title = "mytitle";
直接进入MainViewModel()
.
有些人似乎有类似的问题(例如here),但我想知道我是否做错了什么。
在您的 MainViewModel 构造函数中,当您将 reader 列表分配给 IList 时,两者将指向同一个对象,因此当您修改一个时,另一个也会被修改。
另一方面,String 虽然是引用类型,但它是不可变的,因此它的行为非常像值类型。因此,当您修改 reader class 中的字符串时,您并没有修改 ViewModel 中的字符串。
我正在使用 OxyPlot 显示 WPF/.net 4.5 下的基本 line-Chart,XAML 的相关部分如下所示:
<oxy:Plot Title="{Binding Title}">
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding Points}"/>
<oxy:LineSeries ItemsSource="{Binding Points2}"/>
</oxy:Plot.Series>
<oxy:Plot.Axes>
<oxy:CategoryAxis Position="Bottom" ItemsSource="{Binding Labels}" />
</oxy:Plot.Axes>
</oxy:Plot>
创建图表的代码是这样的:
public class MainViewModel
{
public MainViewModel()
{
this.Title = reader.title;
this.Points = reader.mylist;
this.Points2 = reader.mylist2;
this.Labels = reader.labs;
}
public string Title { get; private set; }
public IList<DataPoint> Points { get; private set; }
public IList<DataPoint> Points2 { get; private set; }
public IList<String> Labels { get; private set; }
}
在另一种方法中根据需要设置和更改属性,基本上就像这样:
public static List<DataPoint> mylist = new List<DataPoint>();
public static List<DataPoint> mylist2 = new List<DataPoint>();
public static List<String> labs = new List<String>();
public static string title;
public void setchart()
{
mylist.Add(new DataPoint(0,5));
mylist.Add(new DataPoint(1,10));
mylist2.Add(new DataPoint(0,30));
mylist2.Add(new DataPoint(1,25));
labs.Add("date1");
labs.Add("date2");
title = "mytitle";
MainWin.myPlot.InvalidatePlot(true);
}
它适用于图表中的线条 (Points, Points2) 和 x-axis 上的标签 (Labels)。但是图表的标题不会更新 - "mytitle" 永远不会作为图表的标题出现,除非我把它写成
this.Title = "mytitle";
直接进入MainViewModel()
.
有些人似乎有类似的问题(例如here),但我想知道我是否做错了什么。
在您的 MainViewModel 构造函数中,当您将 reader 列表分配给 IList 时,两者将指向同一个对象,因此当您修改一个时,另一个也会被修改。
另一方面,String 虽然是引用类型,但它是不可变的,因此它的行为非常像值类型。因此,当您修改 reader class 中的字符串时,您并没有修改 ViewModel 中的字符串。