基本功能的奇怪行为

A191919

我有ObservableCollection巫婆可以容纳两个不同的类型FirstDerivedTypeSecondDerivedType他们两个都有参考Data主要的问题是为什么当我创建PlotModelin构造函数的实例时FirstDerivedType()

Data.PlotModel = new PlotModel();

很好 但是当我创建PlotModelin的实例时base.Draw(Data.PlotModel);我进入nullDataContext为什么?

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; }
}
}
奥德斯·吉

在无法正常工作的情况下,您无需设置PlotModeltype实例的属性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

尝试重命名DrawCreatePlotModel,然后执行以下操作:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章