Сначала загружается окно, затем запускается команда, когда я использую интерактивность

Я использую следующий код для вызова LoadCommand в ViewModel во время загрузки моего окна.

<code>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding LoadCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>   
</code>

Но я вижу, что Window загружается до запуска LoadCommand. Итак, мой код, который я поместил в свою LoadCommand

public ICommand LoadCommand
{
    get
    {
        if (_loadCommand == null)
        {
            _loadCommand = new RelayCommand(
                param => this.Load(),
                param => this.CanLoad
                );
        }
        return _loadCommand;
    }
}
List<Match> matchList;
ObservableCollection<Match> _matchObsCollection;

public ObservableCollection<Match> MatchObsCollection
{
    get { return _matchObsCollection; }
    set
    {
        _matchObsCollection = value;
        OnPropertyChanged("MatchObsCollection");
    }
}
public void Load()
{
    matchList = matchBLL.GetMatch();

}
bool CanLoad
{
    get { return true; }
}

срабатывает после загрузки моего окна. Если я помещаю свой код в конструктор моей ViewModel, то он срабатывает до загрузки окна. Я хочу знать, как в MVVM я могу сначала запустить команду и загрузить второе окно. Заранее спасибо.

1 ответ

Решение

Кажется, проблема в том, что окно загрузилось до того, как был создан экземпляр ViewModel и привязан к DataContext. Решение состоит в том, чтобы создать экземпляр вашей ViewModel перед вашим View.

var vm = new MyViewModel();
var view = new MyView();
view.DataContext = vm;
view.Show();

Не используйте каркас, который создает экземпляр представления, а затем "обнаруживает" применимую модель представления, по крайней мере, в этом случае.

Другие вопросы по тегам