Проблема с интерактивностью в MVVMLight - PullRequest
2 голосов
/ 10 февраля 2012

Все, я работаю над приложением MVVMLight с WPF, но моя проблема в том, что я хочу вызвать событие Loaded, как только пользователь сможет загрузить страницу. Например, У меня есть несколько страниц навигации, поэтому всякий раз, когда пользователь нажимает на любую страницу, должно запускаться событие PageLoaded. Но в моем случае это не так. У меня есть другая страница, которая прекрасно работает. Я не знаю, где я делаю ошибку.

Мой код 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>

И ViewModel выглядит так:

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

private void UserControlLoaded()
{
    GetFriendsList();
}

Это не загружается, когда я иду на эту страницу. Это не запускает событие. Кто-нибудь может мне помочь?

Спасибо ..

1 Ответ

0 голосов
/ 22 февраля 2012

Насколько я знаю, загруженное событие происходит до того, как взаимодействие будет рассмотрено.Поэтому EventToCommand нельзя использовать для обработки события загрузки.В этом случае я обычно создаю обработчик событий, который получает команду из DataContext.Затем метод CanExecute команды оценивается, и если он возвращает true, вызывается метод Execute.

Этот шаблон не противоречит шаблону MVVM и является чистым выходом из тех случаев, когда EventToCommand не может использоваться.Однако один недостаток заключается в том, что статус CanExecute не связан автоматически с включенным свойством.Но это не должно быть проблемой для редких случаев, когда вы должны использовать этот шаблон, так как, когда у вас нет взаимодействия, у вас обычно нет визуального.

...