【发布时间】:2011-07-26 17:10:15
【问题描述】:
我有一个QuestionsFile 课程,里面有问题、名字等...
现在我已经创建了一个 wpf 应用程序,并且我有一个包含不同页面的窗口。这些页面继承BaseViewModel 类。我在WindowViewModel 类中创建我的页面(我将一个新的QuestionsFile 对象传递给构造函数并通过其他视图模型的构造函数分派它):
var chooseQFVM = new ChooseQuestionsFileViewModel(this.QuestionsFile);
var showChosenQFVM = new ShowChosenQuestionsFileViewModel(this.QuestionsFile);
var pages2 = new List<WizardControlViewBaseModel>();
pages2.Add(chooseQFVM);
pages2.Add(showChosenQFVM);
pages = new ReadOnlyCollection<WizardControlViewBaseModel>(pages2);`
所有这些视图模型都继承了具有QuestionsFile 属性的BaseViewModel 类。
因此,假设我从组合框中更改了 chooseQFView 变量的 QuestionsFile 属性并将其通过 - BaseBiewModel 类中的相同属性必须更改。这是BaseBiewModel 类中属性的代码:
public QuestionsFile QuestionsFile
{
get { return qfile; }
set
{
qfile = value;
OnPropertyChanged("QuestionsFile");
}
}
所以我调用了PropertyChanged 事件,但是当我想在下一页调用这个属性并进行调试时,它说我的QuestionsFile 的所有属性都是空的..
这是我更改 QuestionsFile 属性值的代码:
public OptionViewModel<QuestionsFile> SelectedFile
{
get
{
return selectedFile;
}
set
{
selectedFile = value;
OnPropertyChanged("SelectedFile");
this.QuestionsFile = value.GetValue();
}
}
【问题讨论】:
-
你能设置一些断点来看看什么时候设置的吗?
-
首先我创建了我的 windowviewmodel,在其中创建了一个新的 Questionsfile,然后我创建了我的页面,所以第一个代码块.. 然后我从组合框中选择了一个 questionsfile,然后我调用了 setter selectedfile,我这样做的地方:this.QuestionsFile = value.GetValue();所以'this'指的是baseviewModel,他在其中调用了问题文件的设置器,然后他当然改变了属性
-
setter 工作,所以当你调试它会将 questionsFile 设置为值......唯一的问题是当我尝试调用 QuestionsFile 的 getter..
-
所以
qfile = value工作并且它具有正确的值,但是当调用get 时,qfile 已更改为null?也许你有其他人在修改 qfile,或者你在 set 和 get 之间有不同的 ViewModel。 -
也许需要更多信息,这就是我在我的视图模型的构造函数中所做的(我在创建页面(第一个代码块)中创建的): public ChooseQuestionsFileViewModel(QuestionsFile qf):base( qf) { }
标签: wpf object mvvm properties binding