2012-02-10 45 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