WPF 设计问题(自定义控件或 mvvm)

标签 wpf design-patterns mvvm custom-controls

这是场景:

  • 我有一个显示一些数据的视觉对象
  • 视觉对象的数据可以通过以下两种方式之一出现
  • 通过用户通过键盘或鼠标输入
  • 通过一些后端源
  • 这两个数据输入都可以是两种形式之一
  • 控制数据或
  • 简单显示的原始数据
  • 控制数据导致视觉变化
  • 原始数据按原样显示

  • 换句话说, View 由两个主服务器提供服务,即用户输入和后端输入。
    一个例子是具有由用户输入控制的视觉效果的多用户游戏
    但也可能具有由某些后端输入(例如 tcp/ip)控制的相同视觉效果。
    另一个例子是终端模拟器,它获取用户输入但也获取数据
    从另一个来源是 telnet 或串行等。

    我正在考虑为视觉对象编写一个 WPF 自定义控件。换句话说,
    它是一个黑匣子,将解释输入并显示结果。
    让用户输入这个自定义控件很容易,因为可以监听
    适当的事件并根据需要处理它们。然而,怎么听
    来自后端的输入?暴露一个绑定(bind)到的依赖属性不会使
    有意义,但在使用数据调用的视觉对象上公开方法也不会使
    感觉。

    另一种选择是 MVVM 架构,其中 Model 是后端数据源
    View 模型完成所有工作。它获取后端数据(通过模型)
    和用户输入(通过适当的命令绑定(bind)等),它使
    适本地感知这些并绑定(bind)到 View 以显示这些更改。

    自定义控件的优点是它可以作为一个控件使用
    照顾好自己,因此消费者只需做很少的工作即可使用它
    但问题是从后端获取数据。 MVVM 方法的优势在于它巧妙地封装了处理逻辑、 View 等。问题是
    必须为每个后端重复此模式。因此,使视觉非常裸露
    并将所有处理逻辑暴露在控件之外。基本上我想要
    使其非常容易食用,以便有人可以服用并使用它而无需添加
    太多的外部逻辑来做处理等。他们提供的只是他们的后端数据
    输入视觉的源。

    抱歉,这是一篇冗长的文章,但我正在学习 WPF,这是一个有趣的设计
    对我的问题。欢迎所有想法,评论等。

    谢谢阅读。

    最佳答案

    我肯定会使用 MVVM 模式。您可以在代码中很好地分离关注点,并且您的 View 模型也可以在用户界面之外进行测试。您还可以在 Blend 中编辑您的 View 。我认为将 View 模型连接到后端并不比连接自定义控件更复杂。您可能决定使用依赖注入(inject)或服务定位器来连接事物。通过使用所有这些设计模式,您可以获得更加解耦和可测试的解决方案。

    关于WPF 设计问题(自定义控件或 mvvm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309100/

    相关文章:

    c# - WPF 删除选中项目的 ListView 边框

    c# - C# ExpressionVisitor 实现的动机是什么?

    WPF:如何正确使用 MVVM 模式

    silverlight - Silverlight View通过MEF将DependencyProperty导出到ViewModel

    java - 自动计算字段和用户输入值的设计模式

    c# - TextBox应该以特定格式显示十六进制文本

    wpf - 在 MouseOver 上更改用作按钮模板的路径的填充颜色

    wpf - 装饰器没有出现

    Wpf:Storyboard.TargetName 有效,但 Setter TargetName 无效

    design-patterns - 充满静态方法的类的设计注意事项