MVVM命令后更新UI的方法是什么?

时间:2009-08-23 20:04:25

标签: wpf mvvm binding command

我正在通过一个项目学习MVVM,而我却陷入了一些简单的事情。

我有Button更新ListView。我在ViewModel中有一个command可以做出正确的事情,但我想在我点击TextBox后选择新行并将焦点放在Button上。

问题是:如何在执行命令后更新我的UI?

如果我需要在操作完成后更改我的Windows标题,我在ViewModel上使用绑定到Window标题的属性,并在需要时更改但是,我不知道如何获得焦点在命令执行时的控件上。

谢谢。

5 个答案:

答案 0 :(得分:2)

要选择新行,请向ViewModel添加新属性(例如“SelectedItem”),并将ListView的SelectedItem属性绑定到它:

<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">...

在ViewModel中,您只需将新项目分配给SelectedItem属性

为了集中TextBox,迈克的想法似乎很好

答案 1 :(得分:1)

您可以制作附加行为。我建议使用新的Blend行为框架,即包含此自定义逻辑的TriggerAction。

对于你的附加行为,你把它放在按钮上,给它一个IC为ICommand,也许是一个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行为(download here),这几乎是你需要的1/2。

答案 2 :(得分:0)

如何将焦点设置到后面代码中的控件:textBox.Focus() 我认为你在问题中提到的所有内容都是GUI逻辑,所以我会在按钮上添加一个Click事件来处理需要在GUI中发生的事情。

希望这有帮助。

答案 3 :(得分:0)

我认为您需要使用Mediator模式。请看这个:

Josh Smith's Mediator Prototype for WPF Apps

这通常用于与View-Model中的View进行通信。希望这会有所帮助。

答案 4 :(得分:0)

在您的情况下,您需要某种方式ViewModel通知View它应该将焦点设置在特定控件上。

这可以通过IView接口完成。视图实现此接口,ViewModel可以通过此接口调用View的方法。这样,您仍然可以将View和ViewModel相互分离。

如何做到这一点如下所示:

WPF应用框架(WAF)

http://waf.codeplex.com