0
我有一個帶有多個文本框的用戶控件的Silverlight應用程序。我正在使用MVVM模式。如何在Silverlight中設置焦點
當我點擊添加按鈕時,ViewModel執行一些邏輯。在添加命令邏輯完成後,我想在每次單擊後將SetFocus設置爲txtName文本框。
我該怎麼用Silverlight UserControl和MVVM做到這一點?
我有一個帶有多個文本框的用戶控件的Silverlight應用程序。我正在使用MVVM模式。如何在Silverlight中設置焦點
當我點擊添加按鈕時,ViewModel執行一些邏輯。在添加命令邏輯完成後,我想在每次單擊後將SetFocus設置爲txtName文本框。
我該怎麼用Silverlight UserControl和MVVM做到這一點?
當然沒有「IsFocused」屬性,但也有至少兩個MVVM友好的方式,你可以使用:
EventTrigger
,然後使用CallMethodAction
在目標元素上調用「SetFocus」。Behavior
以及附加屬性在目標上調用「焦點」。對於第一個,你只需要像這樣:
<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" />
(或者,而不是使用CallMethodAction
,你也可以使用一個簡單的"focus"動作。)
我不會發布第二種方法的任何代碼 - 這是一個常見的用例,您將能夠找到ex通過搜索找到(for example)。基本思想是創建一個Behavior
類,並在其「change」處理程序中添加布爾附加屬性「IsFocused」,然後在AttachedObject上調用「Focus」。然後您可以將屬性MVVM式綁定到一個屬性在您的視圖模型,這樣的事情:
<TextBox x:Name="NameOfElementToFocus" my:FocusBehavior.IsFocused="{Binding IsTextBoxFocused}" />
哦McGarnagle,有一天,我一定給你買啤酒先生,我從來沒有想過,簡單callmethodaction路線,乾杯。 – 2014-10-21 19:33:53