我正在尝试开始使用MVVM模式并且正在努力解决这个问题。
我有一个输入字段,我在其中输入搜索过滤器的值。我想记住这个值,通常,我会将它保存在应用程序设置中。
输入字段是2视频绑定到View中的设置,它工作正常,并且不会在ViewModel中创建任何应用程序依赖项。我认为这对于单元测试非常重要。
现在我想响应输入字段中的更改并应用过滤器,但绑定是应用程序设置而不是ViewModel。
我该如何解决这个问题?我可以将一个字段双重绑定到设置和ViewModel吗?对这种情况采取何种明智和务实的态度?
答案 0 :(得分:1)
根据您的确切设置,有几种简单的方法可以解决这个问题。
如果您只有一个用户输入的文本框,并且您以交互方式过滤数据,那么您可以在视图*后面的代码中使用TextChanged事件处理程序。然后,您可以从该事件处理程序调用viewmodel公开的命令,该命令可以将搜索文本作为其输入并相应地过滤数据。当然,viewmodel也可以加入你的应用程序设置数据对象,但我更喜欢将它作为命令参数的更直接和声明的方法。
如果您有文本框,然后通过按钮启动搜索/过滤器,那么您可以只显示按钮所绑定的viewmodel中的命令,并且作为命令参数,您可以使用元素绑定来传递发短信到命令。
使用这些方法中的任何一种,viewmodel中的搜索/过滤器代码都是非常可测试的。您通常不会在UI中对代码进行单元测试,因此您无需担心TextChanged处理程序中的代码。我还要提一下,如果你使用的是交互式搜索,那么Reactive Extensions对你来说非常有用,因为它们提供了一种方便的方法来限制对viewmodel的调用。
*一些认为自己是绝对纯粹主义者的人会对视图中的代码思想感到不寒而栗,但如果它只是纯粹的UI /显示相关代码就可以这样做,你可以通过它的界面调用viewmodel。 / p>