我有一个带有多个文本框的用户控件的Silverlight应用程序。我正在使用MVVM模式。
当我单击Add按钮时,ViewModel会执行一些逻辑。添加命令逻辑完成后,我希望每次单击后将SetFocus设置为txtName文本框。
如何使用Silverlight UserControl和MVVM执行此操作?
答案 0 :(得分:2)
当然没有" IsFocused"属性,但至少有两种MVVM友好的方法可以使用:
EventTrigger
"点击"事件,然后使用CallMethodAction
来调用" SetFocus"在目标元素上。Behavior
和附加属性来调用" Focus"在目标上。首先,你需要这样的东西:
<Button Content="Add"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding AddCommand}" />
<ei:CallMethodAction TargetObject="{Binding ElementName=NameOfElementToFocus}"
MethodName="Focus" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<TextBox x:Name="NameOfElementToFocus" />
(或者,您也可以使用简单的"focus"操作,而不是使用CallMethodAction
。
我不会发布第二种方法的任何代码 - 这是一个很常见的用例,您可以通过搜索(for example)找到示例。基本思想是创建一个Behavior
类,并添加一个布尔附加属性&#34; IsFocused&#34; - 在其改变&#34;处理程序,然后调用&#34; Focus&#34;在AttachedObject上。然后,您可以将属性MVVM样式绑定到视图模型中的属性,如下所示:
<TextBox x:Name="NameOfElementToFocus" my:FocusBehavior.IsFocused="{Binding IsTextBoxFocused}" />