将当前视图模型状态(特别是文本框具有哪些焦点)传递回视图模型的最佳方法是什么?
我的要求是针对特定情境的搜索,具体取决于文本框的焦点,确定要在数据库中搜索的字段。
我正在使用MVVM模式,并且真的不想在视图中放置任何代码。
答案 0 :(得分:2)
为TextBox
创建IsFocussed
属性的附加属性。然后使用双向绑定到ViewModel
答案 1 :(得分:1)
您不希望在VM中放置与视图相关的内容。焦点显然是相关的东西。在VM中,您应该跟踪某些可绑定属性中当前选定的搜索字段。在视图中更改焦点应以某种方式更新当前属性。我没有看到视图中隐藏代码的问题,这将是跟踪焦点和更新VM的最简单方法。如果你不想做后面的代码,那么这也可以通过值转换器或附加行为来完成。
答案 2 :(得分:1)
您可以使用Expression Blend SDK中提供的InvokeCommandAction
:
<StackPanel>
<TextBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="GotFocus">
<i:InvokeCommandAction Command="{Binding YourCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
</StackPanel>
其中:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
答案 3 :(得分:0)
我没有真正看到这样做的方法而没有轻微违反View-ViewModel合同(即ViewModel是View不可知)。您可以使用System.Windows.Input
的{{1}}然后获取该元素的数据绑定,以在ViewModel中的搜索命令中执行搜索。