gpt4 book ai didi

.net - MVVM 设计考虑

转载 作者:行者123 更新时间:2023-12-03 10:21:10 24 4
gpt4 key购买 nike

我目前正在开发一个新的 WPF 应用程序,并开发了我的大部分业务逻辑层(即我的模型)。

我即将实现 ViewModel 类来代表我的应用程序的一项功能。我对 Model-View-ViewModel 模式很陌生,并且我有一个问题,即在实现我的 ViewModel 类时最好使用哪种方法。

从在线示例中,我发现模型通常是 ViewModel 的成员。使用这种方法,ViewModel 公开了 Model-member 的属性,以便它们可以绑定(bind)到 View 中的 Model。

例如:

Public Class MyViewModel
Implements INotifyPropertyChanged

Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

Private _myModel As ModelClass

Public Property MyModelPropertyA As Object
Get
Return _myModel.MyModelPropertyA
End Get
Set(ByVal value As Object)
_myModel.MyModelPropertyA = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("MyModelPropertyA")
End Set
Public Property MyModelPropertyB As Object
Get
Return _myModel.MyModelPropertyB
End Get
Set(ByVal value As Object)
_myModel.MyModelPropertyB = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("MyModelPropertyB")
End Set
'.... And so On'

End Class

我不喜欢这种方法的一点是,我将重写很多属性。

因此,我正在考虑在 ViewModel 中继承模型类而不是使用私有(private)成员的选项。

像这样:
Public Class MyViewModel
Inherits MyModel
Implements INotifyPropertyChanged

Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

'Now all of my properties are inherited'
End Class

第二种方法的问题是我不确定如何在应用程序运行时将我的模型转换为 View 模型。

您不能设置 viewModelInstance = ModelInstance。

(但你可以设置modelInstance = viewModelInstance)

我正在寻找有关如何实现 ViewModel 类的最佳方法的建议。

最佳答案

甚至不要考虑从模型继承你的 viewModel - 这将是一个没有人会喜欢的 hack。如果你太懒太暴露所有属性(顺便说一句 resharper 可以自动完成),那么你可以将你的模型包含到你的 viewModel 中,并通过一些只读属性提供对它的访问。但是你应该还有 INotifyPropertyChanged在模型类中实现。

一些代码(对不起C#):

class Model : INotifyPropertyChanged
{
public string Name { get; set; } // this raises PropertyChanged
}

class ViewModel
{
private readonly Model _model;

public Model Model { get { return _model; } }
}

查看 XAML:
<Textbox Text="{Binding Model.Name}" />

关于.net - MVVM 设计考虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4888367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com