如何定义要在View和Model中使用的数据格式?
我清楚地了解ViewModel在这里从Model获取数据,转换它(如果需要)并提供给View(以及相反方向):
用户< - >格式化数据(转换器)< - >查看< - > 转换后的数据(由通用视图使用)< - > ViewModel< - >原始数据< - >模型
现在我的问题是什么?我想将OperationProgress
从Model传递给View:
class OperationStep
{
string _name;
bool _isError;
int _time;
...
}
class OperationProgress
{
List<OperationStep> _steps;
OperationStep _currentStep;
// int _currentStepIndex;
int _currentStepTime;
...
}
ViewModel将OperationProgress
转换为一堆可绑定属性(List<bool>
错误,当前步骤名称和时间倒计时),View使用它们(和转换器!)向用户显示进度。
我愿意创建一个专门的控件来处理进度显示,以避免ViewModels中相同的可重复数据转换为原始类型。
但是我没有弄清楚如何为控件定义数据格式...直接在OperationProgress
控件中使用View
(在ViewModel中公开它并绑定到它)?创建ControlProgress
(专门用于控制的进度数据)?但是,如果ViewModel必须将OperationProgress
转换为ControlProgress
,有什么好处?在模型中使用ControlProgress
(感觉不对)。
所以我来了。如果你们会做类似的事情(传递大量数据,不只是string
或int
,从模型到视图或相反的方向)你会如何组织它?
答案 0 :(得分:2)
您必须决定只使用DataTemplate
定位OperationProgress
类型,或者必须为MVVM
创建一个完整的OperationProgress
堆栈。这取决于数据的复杂性以及与数据的交互。
编辑:
你说:
我愿意创建一个专门的控件来处理进度显示,以避免在ViewModels中将相同的可重复数据转换为基本类型。
但据我所知,您想要的不仅仅是Control
,还有完整的MVVM
堆栈,因此从OperationProgress
到ControlProgress
的转换是也封装在你的新VM中。
所以,你称之为&#34;处理进度显示的专用控件&#34; 将成为OperationProgressView
,而&#34; ControlProgress&#34; < / em>将成为OperationProgressViewModel
。