Инструментарий mvvm-light не запускает событие Window Loaded - PullRequest
2 голосов
/ 01 июля 2010

У меня есть окно и я использую легкий инструментарий MVVM для привязки к событию Loaded:

    <Window 
      ...
      xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
      xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
      ...
      >

      <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
          <cmd:EventToCommand Command="{Binding Loaded, Mode=OneWay}" />
        </i:EventTrigger>
      </i:Interaction.Triggers>
    </Window>

, и в моей модели представления у меня есть следующее:

private ICommand _loaded;
public ICommand Loaded
{
  get
  {
    if (_loaded == null)
    {
      _loaded = CreateAsyncRelayCommand(p => OnLoaded());
    }
    return _loaded;
  }
}

public void OnLoaded()
{
  throw new NotImplementedException();
}

, нов показанном окне исключение не выдается, хотя переменная ICommand инициализируется, когда я ставлю точку останова в свойстве Loaded.Я попытался перейти на использование события Initialized, но все еще то же самое.Это прекрасно работает в другом окне, которое есть в том же приложении, поэтому я почти уверен, что все делаю правильно - может быть, что-то мне не хватает?Когда я связываюсь с code-behind, он работает нормально, но я хочу придерживаться шаблона mvvm.Заранее спасибо.

1 Ответ

0 голосов
/ 13 июня 2011

Попробуйте назначить команду внутри вашего конструктора, т.е.

public ViewModel() {
    _loaded = CreateAsyncRelayCommand(p => OnLoaded());
}
...