将状态信息从视图传递到视图模型

时间:2011-08-11 13:35:02

标签: wpf mvvm

将当前视图模型状态(特别是文本框具有哪些焦点)传递回视图模型的最佳方法是什么?

我的要求是针对特定情境的搜索,具体取决于文本框的焦点,确定要在数据库中搜索的字段。

我正在使用MVVM模式,并且真的不想在视图中放置任何代码。

4 个答案:

答案 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中的搜索命令中执行搜索。