1

我正在尝试开始使用 MVVM 模式并且正在努力解决这个问题。

我有一个输入字段,我在其中输入搜索过滤器的值。我想记住该值,因此通常我会将其保存在应用程序设置中。

输入字段是 2way 绑定到视图中的设置,它可以正常工作并且不会在 ViewModel 中创建任何应用程序依赖项。我认为这对单元测试很重要。

现在我想响应输入字段中的更改并应用过滤器,但绑定是应用程序设置而不是 ViewModel。

我怎么解决这个问题?我可以将一个字段“双重绑定”到设置和 ViewModel 吗?在这种情况下,明智和务实的做法是什么?

4

1 回答 1

1

有几种简单的方法可以解决这个问题,具体取决于您的确切设置。

如果您只有一个用户输入的文本框,并且您以交互方式过滤数据,那么您可以在视图*后面的代码中使用TextChanged事件处理程序。然后,您可以从该事件处理程序调用视图模型公开的命令,该命令可以将搜索文本作为其输入并相应地过滤数据。当然,视图模型也可以访问您的应用程序设置数据对象,但我更喜欢将其作为命令参数的更直接和声明性的方法。

如果您有文本框,然后通过按钮启动搜索/过滤器,那么您可以从按钮绑定到的视图模型中公开一个命令,并且作为命令参数,您可以使用元素绑定将文本传递给命令。

使用这些方法中的任何一种,您在视图模型中的搜索/过滤代码都是非常可测试的。您通常不会对 UI 中的代码进行单元测试,因此您无需担心 TextChanged 处理程序中的代码。我还应该提到,如果您使用交互式搜索,那么Reactive Extensions可能对您非常有用,因为它们提供了一种方便的方式来限制对视图模型的调用。

*一些认为自己是绝对纯粹主义者的人会在视图中出现代码时不寒而栗,但如果它是纯粹的 UI/显示相关代码,则可以这样做,然后您可以通过它的界面调用视图模型。

于 2012-05-11T07:23:40.773 回答