c# - 查看和模型数据格式

标签 c# wpf mvvm

如何定义要在 View 和模型中使用的数据格式?

我清楚地了解这里的 ViewModel 是什么从 Model 获取数据,将其转换(如有必要)并提供给 View(并且以相反的方向):

User <--> formatted data (converters) <--> View <--> converted data (to be used by generic View) <--> ViewModel <--> raw data <--> Model



现在我的问题是什么?我要通过OperationProgress从模型到 View :
class OperationStep
{
    string _name;
    bool _isError;
    int _time;
    ...
}

class OperationProgress
{
    List<OperationStep> _steps;
    OperationStep _currentStep;
    // int _currentStepIndex;
    int _currentStepTime;
    ...
}

ViewModel 转换 OperationProgress成一堆可绑定(bind)的属性(List<bool> 的错误、当前步骤名称和时间倒计时),View 使用它们(和转换器!)向用户显示进度。

我愿意创建一个专门的控件来处理进度显示,以避免相同的重复 数据转换成原始类型 在 View 模型中。

但是我不知道如何为控件定义数据格式...使用OperationProgressView直接控制(在 ViewModel 中公开并绑定(bind))?创建 ControlProgress (专门用于控制的进度数据)?但是,如果 ViewModel 必须转换 OperationProgress 有什么好处?至ControlProgress ?使用 ControlProgress在模型中(感觉不对)。

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

最佳答案

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

编辑:

你说 :

I am willing to create a specialized control to handle progress display, to avoid same repeatable data conversion into primitive types in ViewModels.



但据我了解,您想要的不仅仅是 Control , 但完整的 MVVM堆栈以便从 OperationProgress 转换至ControlProgress也封装在您的新虚拟机中。

因此,您所说的“处理进度显示的专用控件”将变为 OperationProgressView ,并且“ControlProgress”将变为 OperationProgressViewModel .

关于c# - 查看和模型数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26911308/

相关文章:

c# - 将 session 传递到另一个子域

wpf - 如何对 ObservableCollection 进行分页?

c# - 如何在 WPF DataGrid 中按列搜索?

design-patterns - View/ViewModel 循环依赖引用是否合适?

带有 MVVM 和 Prismv2 的 WPF - 事件冒泡?

c# - 如何在 C# 中为创建方法编写单元测试?

c# - Windows 8.1 Windows 应用商店应用程序上的 Sqlite-net - 无法编译 "Not"

C# 检测用户现在是否使用计算机

c# - 使用 XAML 的 Setter 上的“#33333 3' is not a valid value for the ' System.Windows.Controls.Border.BorderBrush”属性

c# - MVVM 解决方案结构