查看和建模数据格式
本文关键字:数据格式 建模 | 更新日期: 2023-09-27 18:30:18
如何定义要在视图和模型中使用的数据格式?
我清楚地了解这里的 ViewModel 是什么,用于从模型获取数据,对其进行转换(如有必要)并提供给视图(以及相反的方向):
用户<-->格式化数据(转换器) <-->视图<-->转换的数据(供通用视图使用) <-->视图模型 <-->原始数据<-->模型
现在我的问题是什么?我想将OperationProgress
从模型传递到视图:
class OperationStep
{
string _name;
bool _isError;
int _time;
...
}
class OperationProgress
{
List<OperationStep> _steps;
OperationStep _currentStep;
// int _currentStepIndex;
int _currentStepTime;
...
}
ViewModel 将OperationProgress
转换为一堆可绑定的属性(错误List<bool>
、当前步骤名称和时间倒计时),View 使用它们(和转换器!)向用户显示进度。
我愿意创建一个专门的控件来处理进度显示,以避免在 ViewModel 中将相同的可重复数据转换为基元类型。
但是我无法弄清楚如何为控件定义数据格式......直接在View
控件中使用OperationProgress
(在 ViewModel 中公开它并绑定到它)?创建ControlProgress
(专门用于控制的进度数据)?但是,如果ViewModel必须将OperationProgress
转换为ControlProgress
,那么有什么好处呢?在模型中使用ControlProgress
(感觉不对)。
所以我来了。如果你们要做类似的事情(传递一堆数据,而不仅仅是string
或int
,从模型到视图或相反的方向),你会如何组织它?
决定是否可以简单地使用针对OperationProgress
类型的DataTemplate
,或者是否必须为OperationProgress
创建一个完整的MVVM
堆栈。这取决于数据的复杂性以及与数据的交互。
编辑:
你说:
我愿意创建一个专门的控件来处理进度显示,以避免在 ViewModel 中将相同的可重复数据转换为基元类型。
但据我了解,您想要的不仅仅是一个Control
,而是完整的MVVM
堆栈,以便从OperationProgress
到ControlProgress
的转换也封装在您的新 VM 中。
因此,您所谓的"处理进度显示的专用控件"将变为OperationProgressView
,而"控件进度"将变为OperationProgressViewModel
。