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

时间:2009-08-20 22:04:59

标签: wpf design-patterns mvvm custom-controls

以下是该方案:

  • 我有一个显示一些数据的视觉
  • 视觉数据可以采用两种方式之一
    1. 通过键盘或鼠标的用户输入
    2. 通过一些后端来源
  • 这些数据输入都可以是两种形式之一
    1. 控制数据或
    2. 简单显示的原始数据
  • 控制数据会导致视觉上的变化
  • 原始数据简单地显示为

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

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

另一种选择是MVVM架构,其中Model是后端数据源 并且View Model完成所有工作。它获得后端数据(通过模型) 并且用户输入(通过适当的命令绑定或一些这样的)并且它使 适当地理解这些并与视图绑定以显示这些变化。

自定义控件的优点是它可以作为控件使用 照顾自己,以便消费者只需要做很少的工作就可以使用它 但问题是从后端获取数据。 MVVM方法是有利的,因为它整齐地封装了处理逻辑,视图等。问题是 每个后端都必须重复这种模式。因此,使视觉非常裸露的骨头 并暴露控制之外的所有处理逻辑。基本上我想要 使其非常容易消费,以便有人可以在不添加的情况下使用它 太多的外部逻辑来处理等等。他们提供的只是他们的后端数据 源于视觉的源。

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

感谢阅读。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

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

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