我正在通过一个项目学习MVVM,但遇到了一些简单的问题。
我有一个Button
,它会更新一个ListView
。我在ViewModel中有一个command
可以做正确的事情,但是当我点击Button
后,我想选择新行并将焦点放在TextBox
上。
问题是:执行命令后如何更新UI?
如果我需要在完成操作后更改窗口标题,我会在ViewModel上使用一个绑定到窗口标题的属性,并在需要时更改它,但是,我不知道如何在执行命令后将焦点放在控件上。
谢谢。
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">...
你可以创建一个附加行为。我建议使用新的 Blend 行为框架,即包含此自定义逻辑的 TriggerAction。
对于你放在按钮上的附加行为,给它一个 ICommand 的 DP,也许还有一个 ListView 类型的 DP。
在 TriggerAction 的 "protected override void Invoke(object parameter)" 中执行你的 ICommand,然后你就有了对你的 ListView 的引用。在这里,你可以对它进行自定义代码,比如设置焦点。
你的 XAML 可能看起来像这样:
<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<Behaviors:CustomBehavior Command="CommandName" ListView="{Binding ElementName=myListView}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<Button/>
我建议看一下Mike Brown的ExecuteCommandAction行为(在这里下载),它大约是你所需内容的一半。