使用MVVM,如何在预定义的对象集合上实现INotifyPropertyChanged?

时间:2017-08-25 09:14:48

标签: c# wpf mvvm inotifypropertychanged

我认为这个问题已经得到了解答,如果是这种情况,我会立即删除。我是WPF的新手(真的是C#的新手)并且我尽可能地努力追随MVVM,但我真的很难找到一种方法来在我的模型上实现INotifyPropertyChanged

我的模型包含一组预定义对象,这些对象是从另一个引用创建的。在模型中,我有在Task完成时更新的属性。

CustomObject - API

public class CustomObject
{
  private string _myTaskOutput;

  public CustomObject()
  {
     _myTaskOutput = MyTaskMethod();
  }

   //MyTaskMethod()

  //Get & Setter for _myTaskOutput;
}

Util - API

 public static class Util
 {
     public IEnumerable<CustomObject> GenerateObjects()
     {
         var customObjectCollection = SomeHelperMethod();
         return customObjectCollection;
     }
 }

模型

   public class CustomObjectCollectionModel
   {
     private IEnumerable<CustomObject> _customObjectCollection;

     public CustomObjectCollectionModel()
     {
         _customObjectCollection = Util.GenerateObjects();
     }

     //Get & Setter for IEnumerable<CustomObject>
   }

对象引用没有改变所以我认为ObservableCollection是不可能的(这是正确的吗?)并且在INotifyPropertyChanged上实现CustomObject按预期工作但我明白这一点不是正确的做事方式。

1 个答案:

答案 0 :(得分:1)

如果CustomObject是某种域或业务对象,则可以将其包装在客户端应用程序的视图模型类中。因此,不是绑定到ObservableCollection<CustomObject>而是绑定到ObservableCollection<CustomObjectWrapper>,其中CustomObjectWrapper是实现INotifyPropertyChanged接口的特定于客户端的类(假设您实际需要提供更改)用户界面中的通知)。

您确实必须为从服务API收到的每个CustomObjectWrapper创建一个CustomObject - 您可以在您的视图模型类中执行此操作 - 但与此同时您不能必须使用特定于客户端的代码污染您的业务对象。直接绑定到特定于域的业务对象很少有用。