查看和建模数据格式

本文关键字:数据格式 建模 | 更新日期: 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(感觉不对)。

所以我来了。如果你们要做类似的事情(传递一堆数据,而不仅仅是stringint,从模型到视图或相反的方向),你会如何组织它?

查看和建模数据格式

您必须

决定是否可以简单地使用针对OperationProgress类型的DataTemplate,或者是否必须为OperationProgress创建一个完整的MVVM堆栈。这取决于数据的复杂性以及与数据的交互。

编辑:

你说:

我愿意创建一个专门的控件来处理进度显示,以避免在 ViewModel 中将相同的可重复数据转换为基元类型。

但据我了解,您想要的不仅仅是一个Control,而是完整的MVVM堆栈,以便从OperationProgressControlProgress的转换也封装在您的新 VM 中。

因此,您所谓的"处理进度显示的专用控件"将变为OperationProgressView而"控件进度"将变为OperationProgressViewModel