Передать CommandParameter с помощью MVVMLight EventToCommand и события загрузки страницы? - PullRequest
1 голос
/ 21 октября 2011

EventToCommand не может передать параметр команды при событии загрузки

При подключении к событию Load страницы или пользовательского элемента управления EventToCommand успешно вызывает обработчик в ViewModel, но не передает CommandParameter.Однако тот же XAML присоединен к другому событию, например, нажатие кнопки, обработчик команд получает данные базы данных в качестве своего параметра.Xaml:

<i:EventTrigger EventName="Loaded" SourceObject="{Binding ElementName=Control}"> <Command:EventToCommand x:Name="etcLoad" Command="{Binding LoadCommand}" CommandParameter="{Binding Target, ElementName=Control}" /> </i:EventTrigger>

Целью является строка DP в представлении.

VM Code:

    internal void Load(string p_Param)
    {
        this.Initialise();
    }

    public RelayCommand<string> LoadCommand { get; private set; }

, и команда назначается так:

    this.LoadCommand = new RelayCommand<string>(this.Load);

Я почти уверен, что проблема заключается в том, что привязка выполняется позже, чем присвоение Target DP или что-то подобное.Я заинтересован в поиске решения для этого как можно скорее или каким-либо другим способом, которым я мог бы получить строку из View и в ViewModel, где строка назначается из переопределения OnNavigateTo.Цель состоит в том, чтобы обеспечить выбор вкладки на основе свойства запроса, предоставляемого через URI, т.е. "/ Views / DisplayTabDetails? Tab = Tab1" или аналогичного.

1 Ответ

4 голосов
/ 21 октября 2011

Используйте свойство PassEventArgsToCommand, чтобы указать, что аргументы события должны быть переданы команде. Поэтому в вашем XAML вы должны использовать:

<i:EventTrigger EventName="Loaded" 
                SourceObject="{Binding ElementName=Control}"> 
    <Command:EventToCommand x:Name="etcLoad" 
                            Command="{Binding LoadCommand}" 
                            PassEventArgsToCommand="True" /> 
</i:EventTrigger>

Редактировать

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

...