Pass Data to Model without triggering PropertyChanged-Event
我是MVVM的新手,正在使用它编写一个小的测试应用程序。我有一个模型,它代表数据结构-一个视图模型和一个视图(父类也是page)。
现在我想把一些初始数据传递给模型,所以窗户可以给我看这些。
在David Anderson的示例应用程序中,他传递数据作为方法参数,这实际上是正确的方法和原因不是PropertyChanged事件的触发器,而是我的模型类相当"胖"——它有很多特性(>30)。那么,在这种情况下,我该如何认识到呢?我不认为有超过30个参数的方法是正确的处理这个问题的方法。还是我错了?
有人知道吗,专业人士是如何认识到这一点的?
这是我用过的代码:
视图(PersonPropertiesView是页面类的子类)
XAML
1 | <TextBlock Text="{Binding Person.ID, UpdateSourceTrigger=PropertyChanged}" /> |
代码隐藏
1 2 3 4 5 | public PersonPropertiesView() { InitializeComponent(); this.DataContext = new PersonPropertiesViewModel(); } |
号
视图模型(个人属性视图模型)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private Person _Person; public Person Person { get { return this._Person; } } public Person() { this._Person = new Individual(); this._Person.ID = 12; } |
模型(Person,继承InotifyPropertiesChanged)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | private long _ID; public long ID { get { return this._ID; } set { if (this._ID != value) { this._ID = value; OnPropertyChanged("ID"); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { if (propertyName != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } |
。
如果我尝试编译此代码,我会得到System.Reflection.TargetInvocationException异常。有人知道为什么吗?
我的第一反应是:为什么?我不确定这是否太重要-在构造后立即设置这些属性时,我可以想象,在将ViewModel绑定到任何视图之前,这个occurs很可能会被绑定到任何视图(尽管没有上下文,我不能确定)。
试图在没有观察员的情况下发射
在您发布的代码中,当没有侦听器时,此代码将引发异常:
1 2 3 4 5 | protected void OnPropertyChanged(string propertyName) { if (propertyName != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } |
您需要检查事件是否为空,而不是属性名:
1 2 3 4 5 6 7 8 | protected void OnPropertyChanged(string propertyName) { var handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } |
号