我有ObservableCollection巫婆可以容纳两个不同的类型FirstDerivedType
和SecondDerivedType
。他们两个都有参考Data
。主要的问题是为什么当我创建PlotModel
in构造函数的实例时FirstDerivedType()
Data.PlotModel = new PlotModel();
很好 但是当我创建PlotModel
in的实例时,base.Draw(Data.PlotModel);
我进入null
了DataContext
。为什么?
namespace WpfApplication3
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new CurrentViewModel();
}
}
public class CurrentViewModel
{
private ObservableCollection<BaseType> items;
public ObservableCollection<BaseType> Items
{
get
{
return this.items;
}
set
{
this.items = value;
}
}
public CurrentViewModel()
{
Items = new ObservableCollection<BaseType>();
Items.Add(new FirstDerivedType (17));
Items.Add(new FirstDerivedType (100));
Items.Add(new FirstDerivedType (50));
Items.Add(new FirstDerivedType (120));
}
}
public class Data:INotifyPropertyChanged
{
public int ID { get; set; }
public PlotModel PlotModel { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string info)
{
if (PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
public abstract class BaseType
{
public virtual void Draw(PlotModel PlotModel)
{
PlotModel = new OxyPlot.PlotModel(); //do not Working
LineSeries LS= new LineSeries();
Random rnd = new Random();
for (int i=0; i<10; i++)
{
LS.Points.Add(new DataPoint(i,rnd.Next(1,100)));
}
PlotModel.Series.Add(LS);
PlotModel.InvalidatePlot(false);
}
}
public class FirstDerivedType : BaseType
{
public FirstDerivedType(int ID)
{
Data = new Data();
//Data.PlotModel = new PlotModel(); //Working
Data.ID = ID;
base.Draw(Data.PlotModel);
}
public Data Data { get; set; }
}
public class SecondDerivedType : BaseType
{
public Data Data { get; set; }
}
}
在无法正常工作的情况下,您无需设置PlotModel
type实例的属性Data
,而只是将method参数的值设置PlotModel
为的新实例PlotModel
。注意,Data.PlotModel
它仍然为空。
这行在这里:
public virtual void Draw(PlotModel PlotModel)
{
PlotModel = new OxyPlot.PlotModel(); //do not Working
为PlotModel
方法的参数分配一个新的实例Draw
,而不是PlotModel
实例的属性Data
。它不会影响Data
拥有该属性的实例PlotModel
。这行:
base.Draw(Data.PlotModel);
Data.PlotModel
如果在方法中重新分配了方法参数,则不会导致属性更改Draw
。
尝试重命名Draw
为CreatePlotModel
,然后执行以下操作:
public virtual PlotModel CreatePlotModel()
{
var model = new OxyPlot.PlotModel();
LineSeries LS= new LineSeries();
Random rnd = new Random();
for (int i=0; i<10; i++)
{
LS.Points.Add(new DataPoint(i,rnd.Next(1,100)));
}
model.Series.Add(LS);
model.InvalidatePlot(false);
return model;
}
然后分配PlotModel
数据的属性:Data.PlotModel = base.CreatePlotModel()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句