C#WPF MVVM:调用对象
我有一个QuestionsFile
类,它有问题,名称等..C#WPF MVVM:调用对象
现在我已经创建了一个WPF应用程序,我有这有不同的页面的窗口。这些页面继承了BaseViewModel
类。创建我的WindowViewModel
类网页(其中我传递一个新QuestionsFile
对象的构造和派遣它通过其他的ViewModels的构造函数):
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);`
所有这些的ViewModels继承BaseViewModel
类有QuestionsFile
财产。
所以当我们假设我改变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();
}
}
从我对你的看法了解你的QuestionFile
秒的采集(通过OptionsViewModel),您可以通过SelectedFile
属性选择其中的一个。此时您正在设置所选的QuestionFile
属性。
这对ChooseQuestionViewModel
(我认为它包含SelectedFile
属性)都是好的。我不确定这是否是您的问题,但SelectedFile
不会反映在之内,因为现在两种视图模型都引用不同的实例。
这是您的问题?您看不到ShowQuestionsFileViewModel
中所选QuestionFile
的更改?
如果是这样你需要告诉它已经通过事件改变,或具有参考ChooseQuestionViewModel
因此它可以监听PropertyChanged
事件,这样你可以抓住从所选择的项目,并更新自身的其他视图模型。
即
//Ctor
public ShowQuestionsFileViewModel(ChooseQuestionViewModel chooseViewModel)
{
_chooseViewModel = chooseViewModel;
chooseViewModel.PropertyChanged += ChoosePropertyChanged
}
private void ChoosePropertyChanged(object sender, PropertyChangedEventArgs e)
{
if(e.Property == "SelectedFile")
{
this.SelectedFile = _chooseViewModel.SelecteFile;
}
}
你可以设置一些断点,看看有什么被设定,当? – 2011-03-31 08:43:34
首先,我创建我的windowviewmodel,在其中创建一个新的问题文件,然后创建我的页面,以便第一个代码块。然后从组合框中选择一个问题文件,然后调用selectedfile的setter,在此处执行此操作: this.QuestionsFile = value.GetValue();因此'this'指的是baseview模型,他在那里调用了Problemfile的setter,然后他执行了课程 – 2011-03-31 08:48:41
的属性changed,并且setter可以工作,所以当你调试它时会将questionsFile设置为值...唯一的问题是什么时候我尝试调用QuestionsFile的getter .. – 2011-03-31 08:53:19