C#WPF MVVM:调用对象
我有一个C#WPF MVVM:调用对象,wpf,object,mvvm,properties,binding,Wpf,Object,Mvvm,Properties,Binding,我有一个QuestionsFile类,它有问题、名称等 现在我已经创建了一个wpf应用程序,我有一个窗口,其中有不同的页面。这些页面继承了BaseViewModel类。我在WindowViewModel类中创建页面(在该类中,我将一个新的QuestionsFile对象传递给构造函数,并通过其他viewmodels的构造函数分派它): 因此我调用了PropertyChanged事件,但是当我想在下一页调用这个属性并调试时,它会说我的QuestionsFile的所有属性都是空的 这是我更改问题文件属
QuestionsFile
类,它有问题、名称等
现在我已经创建了一个wpf应用程序,我有一个窗口,其中有不同的页面。这些页面继承了BaseViewModel
类。我在WindowViewModel
类中创建页面(在该类中,我将一个新的QuestionsFile
对象传递给构造函数,并通过其他viewmodels的构造函数分派它):
因此我调用了PropertyChanged
事件,但是当我想在下一页调用这个属性并调试时,它会说我的QuestionsFile
的所有属性都是空的
这是我更改问题文件
属性值的代码:
public OptionViewModel<QuestionsFile> SelectedFile
{
get
{
return selectedFile;
}
set
{
selectedFile = value;
OnPropertyChanged("SelectedFile");
this.QuestionsFile = value.GetValue();
}
}
public选项查看所选模型文件
{
得到
{
返回所选文件;
}
设置
{
selectedFile=value;
OnPropertyChanged(“SelectedFile”);
this.QuestionsFile=value.GetValue();
}
}
根据我对您视图的了解,您有一个问题文件的集合(通过选项ViewModel),您可以通过SelectedFile
属性选择其中一个。此时,您正在设置所选的QuestionFile
属性
这对于ChooseQuestionViewModel
(我假设它包含SelectedFile
属性)都很好。我不确定这是您的问题,但是SelectedFile
不会反映在ShowQuestionsFileViewModel
中,因为现在两个视图模型都引用了不同的实例
这是你的问题吗?您无法在ShowQuestionsFileViewModel
中看到所选问题文件的更改
如果是这样,您需要告诉另一个视图模型它已通过事件更改,或者让它引用ChooseQuestionViewModel
,以便它可以侦听PropertyChanged
事件,以便您可以从中获取所选项目并更新自身
i、 e
您可以设置一些断点来查看设置的内容和时间吗?首先,我创建了windowviewmodel,在其中我创建了一个新的问题文件,然后我创建了我的页面,因此第一块代码。。然后我从组合框中选择一个questionsfile,然后调用selectedfile的setter,我在其中执行以下操作:this.questionsfile=value.GetValue();所以“this”指的是baseviewModel,他在其中调用Questionsfile的setter,然后他进行属性更改,setter工作,所以当您调试时,它会将Questionsfile设置为值。。。唯一的问题是当我试图调用QuestionsFile的getter时,..Soqfile=value
起作用并且它有正确的值,但是当调用get时,qfile变为null?也许你有其他人在修改qfile,或者你在set和get之间有一个不同的ViewModel。也许要了解更多信息,这就是我在viewmodels的构造函数中所做的(我在创建页面(第一段代码)中创建的):public choosequencementFileViewModel(QuestionsFile qf):base(qf){}
public QuestionsFile QuestionsFile
{
get { return qfile; }
set
{
qfile = value;
OnPropertyChanged("QuestionsFile");
}
}
public OptionViewModel<QuestionsFile> SelectedFile
{
get
{
return selectedFile;
}
set
{
selectedFile = value;
OnPropertyChanged("SelectedFile");
this.QuestionsFile = value.GetValue();
}
}
//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;
}
}