Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WPF MVVM:调用对象_Wpf_Object_Mvvm_Properties_Binding - Fatal编程技术网

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时,..So
qfile=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;
    }
}