使用 MVVM,如何在预定义的对象集合上实现 INotifyPropertyChanged?
Using MVVM, how can I implement INotifyPropertyChanged on a predefined collection of objects?
我觉得这个问题应该已经有人回答了,如果是这样我会立即删除。我是 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
是不可能的(这是正确的吗?)并且在 CustomObject
上实现 INotifyPropertyChanged
可以按预期工作,但我理解这不是正确的做事方式。
如果 CustomObject
是某种域或业务对象,您可以将其包装在客户端应用程序的视图模型中 class。因此,不是绑定到 ObservableCollection<CustomObject>
,而是绑定到 ObservableCollection<CustomObjectWrapper>
,其中 CustomObjectWrapper
是特定于客户端的 class,它实现了 INotifyPropertyChanged
接口(前提是您实际上需要在 UI).
中提供更改通知
您确实需要为从服务 API 收到的每个 CustomObject
创建一个 CustomObjectWrapper
- 您可以在视图模型 class 中执行此操作 -但与此同时,您不必使用特定于客户的代码来污染您的业务对象。直接绑定到特定领域的业务对象很少有用。
我觉得这个问题应该已经有人回答了,如果是这样我会立即删除。我是 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
是不可能的(这是正确的吗?)并且在 CustomObject
上实现 INotifyPropertyChanged
可以按预期工作,但我理解这不是正确的做事方式。
如果 CustomObject
是某种域或业务对象,您可以将其包装在客户端应用程序的视图模型中 class。因此,不是绑定到 ObservableCollection<CustomObject>
,而是绑定到 ObservableCollection<CustomObjectWrapper>
,其中 CustomObjectWrapper
是特定于客户端的 class,它实现了 INotifyPropertyChanged
接口(前提是您实际上需要在 UI).
您确实需要为从服务 API 收到的每个 CustomObject
创建一个 CustomObjectWrapper
- 您可以在视图模型 class 中执行此操作 -但与此同时,您不必使用特定于客户的代码来污染您的业务对象。直接绑定到特定领域的业务对象很少有用。