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

Hit*_*shP 3 wpf design-patterns custom-controls mvvm

这是场景:

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

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

我正在考虑为视觉编写WPF自定义控件.换句话说,它是一个黑盒子,可以解释输入并显示结果.将用户输入到此自定义控件很容易,因为可以监听适当的事件并根据需要处理它们.但是,如何从后端监听输入?公开绑定到的依赖项属性没有意义但是在使用数据调用的视觉上公开方法也没有意义.

另一种选择是MVVM架构,其中Model是后端数据源,View Model完成所有工作.它同时获取后端数据(通过模型)和用户输入(通过适当的命令绑定或其他一些),并且它适当地理解这些并绑定到View以显示这些更改.

自定义控件的优点是它可以作为一个控制自己的控件使用,这样消费者只需要做很少的工作就可以使用它,但问题是从后端获取数据.MVVM方法是有利的,因为它整齐地封装了处理逻辑,视图等.问题是必须为每个后端重复这种模式.因此,使视觉非常裸露,并将所有处理逻辑暴露在控制之外.基本上我想让它非常容易消费,这样有人可以使用它而不需要添加太多的外部逻辑来进行处理等.它们提供的只是它们的后端数据源,它们被输入到视觉中.

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

谢谢阅读.

Mar*_*age 5

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