查看和建模数据格式

时间:2014-11-13 14:35:28

标签: c# wpf mvvm

如何定义要在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(感觉不对)。

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

1 个答案:

答案 0 :(得分:2)

您必须决定只使用DataTemplate定位OperationProgress类型,或者必须为MVVM创建一个完整的OperationProgress堆栈。这取决于数据的复杂性以及与数据的交互。

编辑:

你说:

  

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

但据我所知,您想要的不仅仅是Control,还有完整的MVVM堆栈,因此从OperationProgressControlProgress的转换是也封装在你的新VM中。

所以,你称之为&#34;处理进度显示的专用控件&#34; 将成为OperationProgressView,而&#34; ControlProgress&#34; < / em>将成为OperationProgressViewModel