2012-02-10 71 views
2

大家好,我正在使用WPF的MVVMLight應用程序,但我的問題是我想在用戶可以加載頁面時觸發Loaded事件。對於例如我有一些導航頁面,所以無論用戶何時點擊任何頁面,都應該觸發PageLoaded事件。但在我的情況下,它不是以同樣的方式解僱。我有另一個工作得很好的頁面。我不知道我犯了什麼錯誤。與MVVMLight中的交互問題

我的XAML代碼如下所示:

xmlns:vm="clr-namespace:Test.User.Facebook.ViewModel" 
<UserControl.Resources> 
    <ResourceDictionary> 
     <vm:ViewModelLocator x:Key="Locator"/> 
    </ResourceDictionary> 
</UserControl.Resources> 


<UserControl.DataContext> 
    <Binding Source="{StaticResource Locator}" Path="FriendsList"/> 
</UserControl.DataContext> 


<i:Interaction.Triggers> 
    <i:EventTrigger EventName="Loaded"> 
     <cmd:EventToCommand Command="{Binding LoadedCommand}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

而視圖模型看起來是這樣的:

public RelayCommand LoadedCommand { get; private set; } 
public FriendsListViewModel() 
{ 
    LoadedCommand = new RelayCommand(() => UserControlLoaded()); 
} 

private void UserControlLoaded() 
{ 
    GetFriendsList(); 
} 

當我去到這個頁面。這不加載。它不會觸發事件。有人可以幫助我嗎?

謝謝..

+0

是否將'EventToCommand'綁定到您的ViewModel?也許你正在研究一個不同的'DataContext'。嘗試顯式設置'DataContext'。 – alf 2012-02-10 12:39:25

+0

2012-02-10 12:51:35

+0

我已經測試過上述方法.. – 2012-02-10 12:54:49

回答

0

據我知道的相互作用盯着之前發生Loaded事件。因此,EventToCommand不能用於處理加載事件。在這種情況下,我通常創建一個事件處理程序,它從DataContext獲取命令。然後評估該命令的CanExecute方法,如果它返回true,則調用Execute方法。

此模式不會與MVVM模式相矛盾,並且是無法使用EventToCommand的場合的一種乾淨方式。然而,一個缺點是CanExecute狀態未綁定到enabled屬性automaticall。但是,對於那些你不得不使用這種模式的罕見場合來說,這應該不成問題,因爲當你沒有交互時,你通常沒有視覺效果。

+0

謝謝@Obalix,但這是不可能的我們的情況...!但再次感謝給予好主意..! – 2012-02-23 05:58:41

+0

@Jitendra_Jadav:爲什麼不可能?正如我所說的,當EventToCommand機制無法處理事件(還有其他事件)時,這是一種常見方式。它不會制約MVVM模式,因爲它仍然將VM代碼從視圖中分離出來,並且代碼僅與視圖相關。 S請分享你的約束,讓社區有機會找到正確的答案。 – AxelEckenberger 2012-02-23 06:30:50

+0

@Jitendra_Jadav:...你需要樣品嗎? – AxelEckenberger 2012-02-23 06:31:58