我有一个奇怪的&令人沮丧的问题在我的一些类之间传递一个对象。这源于我是一名编剧,而不是一名程序员,而且我只是笨手笨脚的。所以我敢肯定,我正在做一些愚蠢的事:)将数据传递给构造函数
我想建立一个向导对话框有多个页面。我使用CodeProject的“国际化WPF向导”教程作为起点,并尝试将其适用于我的域。我陷入困境,因为我的向导页似乎无法引用模型。
我也做了以下内容:
- 创造了我的模型类(姑且称之为迈德特)
- 创建一个基类为我的视图模型(ViewModelBase)
- 创建的视图模型类为我的每个页面,从ViewModelBase继承(例如下面的例子是WelcomePageViewModel)
- 创建一个'控制器'风格的视图模型驱动向导。 (WizardController)
当向导启动时,WizardController被实例化。 WizardController也实例化MyData.Then,WizardController实例化其余页面的每个视图模型。
实际的GUI似乎工作正常,我可以看到每个页面的视图模型正在正确加载。下面是一些代码:
public class MyData
{
private string _someString;
public MyData(string someString)
{
_someString = someString;
}
}
public abstract class ViewModelBase : INotifyPropertyChanged
{
bool _isCurrentPage;
readonly MyData _myData;
public ViewModelBase(MyData myData)
{
_myData = myData;
}
}
public class WizardController : INotifyPropertyChanged
{
MyData _myData;
public WizardController()
{
_myData = new MyData("The Widgets");
}
}
public class WelcomePageViewModel : ViewModelBase
{
private MyData _myData;
public WelcomePageViewModel(MyData myData)
: base(myData)
{
_myData = myData;
// accessing _myData fails :(
MyLogger.WriteLine("Grabbed an instance of myData: " + _myData.ToString());
}
}
然而,当我尝试从WelcomePageViewModel访问myData的我的代码失败。在WelcomePageViewModel的MyLogger行中,抛出错误“对象引用未设置为对象的实例”。
基本上,我试图实现的是WizardController设置MyData,并且每个向导页都可以访问(并操纵)它。所以任何指导将不胜感激!
如果是访问代码'WelcomePageViewModel'对象? “WelcomePageViewModel”存储在哪里? –
如果你在抽象类中声明它,为什么然后在实际实现的类中重新声明它?另外,如果你想在继承类中访问它,你会希望它被保护而不是私人的。如果您需要覆盖它,请使用虚拟和覆盖关键字。 –