2009-08-23 54 views
4

我通過項目學習MVVM,我就死在簡單的東西。我有Button更新ListView。我在ViewModel中有一個command,它可以做出正確的事情,但是我想要選擇新行,並在單擊Button後關注TextBoxMVVM在命令之後更新UI的方式是什麼?

問題是:如何在執行命令後更新我的UI?

如果我需要在操作完成後更改窗口標題,我使用ViewModel上的一個屬性綁定到Window的標題,並在需要時更改它,但是我不知道如何獲取在執行命令時關注控制。

謝謝。

回答

2

要選擇新行,一個新的屬性添加到您的視圖模型(「的SelectedItem」爲例),和ListView控件的SelectedItem屬性綁定到它:

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

在視圖模型,你只需要分配到SelectedItem屬性

的新項目集中的文本框,小李的想法似乎是一個好一個

0

將焦點設置到後面的代碼中的控件如何:textBox.Focus() 我認爲你提到的所有問題都是GUI邏輯,所以我將一個Click事件添加到按鈕來處理需要的東西在GUI中發生。

希望這會有所幫助。

+0

是的,我試過了,但是如果有命令,並在同一時間兩個事件被執行。事件將在命令之前執行(這是我所看到的)。我需要在命令之後執行事件,因爲我需要在命令執行時設置焦點。如果我刪除了按鈕中的命令,並且在事件內部執行了它,那麼我失去了CanExecute事件,因爲如果將該命令附加到控件上,CanExecute可以正常工作。 – 2009-08-24 10:43:44

+0

你需要從XAML調用命令嗎?你不能從Click事件中調用它嗎?從datacontext獲取命令並從那裏執行? – Fossmo 2009-08-25 08:51:21

+0

正如我所說,如果我從click事件中調用命令,我失去了CanExecute的事情。 – 2009-08-25 12:02:19

1

你可以做一個附加行爲。我建議使用新的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/> 

我建議看着邁克·布朗的ExecuteCommandAction行爲(download here),它是關於近1/2的你所需要的。

0

在你的情況下,你需要某種方式讓ViewModel通知View它應該把焦點放在一個特定的控件上。

這可能與IVIEW界面來完成。視圖實現了這個接口,ViewModel可以通過這個接口調用View的一個方法。這樣您仍然可以將View和ViewModel彼此分離。

如何可以做到這一點如下所示:

WPF應用程序框架(WAF)

http://waf.codeplex.com

相關問題