【问题标题】:WPF design question (custom control or mvvm)WPF 设计问题(自定义控件或 mvvm)
【发布时间】:2009-08-20 22:04:58
【问题描述】:

这是场景:

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

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

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

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

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

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

感谢阅读。

【问题讨论】:

    标签: wpf design-patterns mvvm custom-controls


    【解决方案1】:

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

    【讨论】:

    • 马丁,感谢您的建议。我当然可以看到 MVVM 模式在这里很合适,但是我遇到的问题是我想让这个东西很容易消费并且(我的理解有限)我觉得将 MVVM 添加到等式中会破坏黑盒设计的本质迫使使用它的人也遵循模式并提供插入架构的适当挂钩(读取模型)。也许我缺少一些可以解决此问题的一般设计知识。我将研究您建议的设计模式。谢谢。
    【解决方案2】:

    我很想了解更多有关 CustomControls 的信息,但同时我认为最好的选择是将 UserControl 用作 DataTemplate:

    http://www.codeproject.com/Articles/28060/WPF-UserControl-DataTemplate

    【讨论】:

    • Stack Overflow 不欢迎仅链接的答案。请在此处添加信息。
    猜你喜欢
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多