【问题标题】:Base viewmodel doesn't contain property? In Wpf MVVM基本视图模型不包含属性?在 Wpf MVVM 中
【发布时间】:2011-08-12 23:26:58
【问题描述】:

我实现了一种向导。有多个窗口。每个窗口的每个视图模型都是一个基超类(也是一个视图模型)的子类。在第一个窗口中,我填写了一个位于基类中的属性。但是在下一个窗口中,如果我想获得该属性,它是空的。这很烦人,我真的不知道这是怎么回事。

这是我的 BaseViewModel:

public abstract class WijzigToetsBaseViewModel : INotifyPropertyChanged
    {
        #region Fields

       Examination exam;           

        #endregion // Fields

        #region Constructor

        protected WijzigToetsBaseViewModel()
        {

        }



        #endregion // Constructor

        #region Properties

        public Examination Examination
        {
            set { if(value != null)
                exam = value; this.OnPropertyChanged("Examination");
            }
            get { return exam; }
        }

所以我的“共享”属性是检查,在第一个窗口中,我通过以下方式填写:

(第一个窗口的viewmodel,实现上面的model)

 public string Pad
        {
            get { return pad; }
            set { pad = value;
            OnPropertyChanged("Pad");

            this.Examination = XmlConversionExamination.ReadExamination(value);
            Naam = this.Examination.Name;
            }
        }

但是,如果我想在第二个窗口中获得属性“考试”,它会给出 null:

 public string Test
        {
            get {

                    return this.Examination.Name;             
            }
            set { test = value;
            OnPropertyChanged("Test");
            }
        }

(这是在第二个视图模型中,也实现了基本视图模型。)所以这里 this.Examination = null。这有点奇怪,因为我在第一个窗口中设置了考试属性。有想法的人吗? 谢谢

【问题讨论】:

    标签: wpf mvvm null properties


    【解决方案1】:

    如果您有两个不同的 ViewModel,那么您就有两个“基本”ViewModel 实例。所以这是意料之中的,因为 Exam 是一个实例属性。

    【讨论】:

    • 那么我该如何解决这个问题呢?可能将每个视图绑定到同一个视图模型?
    • 绑定到视图模型的同一个实例应该可以解决您的问题
    • 问题是“考试”应该代表什么。它是“单身”财产吗?例如,在这种情况下,您可以将其设为静态。还是应该有多个独立的属性值,但是这两个 ViewModel 应该共享该值?在这种情况下,请查看 ViewModel 通信,例如。 MVVM 中介者模式。
    【解决方案2】:

    在我看来,您应该在不同的“页面”中使用相同的 ViewModel 实例。 ViewModel 将包含两个页面上的属性,但视图只会在页面上公开相关的属性。你可能不想推出自己的Wizard,也许使用like this,或者像this post suggests.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      相关资源
      最近更新 更多