Я начинаю применять шаблон проектирования Mvvm в моем текущем проекте, и в качестве фреймворка я использовал инструментарий Mvvm Light.Теперь я столкнулся с проблемой при использовании EventToCommand для обработки события «GotFocus».Файл xaml выглядит примерно так:
<TextBox x:Name="TextBox1">
<i:Interaction.Triggers>
<i:EventTrigger EventName="GotFocus">
<cmd:EventToCommand Command="{Binding TestCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
Я хочу выполнить TestCommand в модели представления всякий раз, когда запускается «GotFocus».Но проблема в том, что «TestCommand» не выполняется для начального «GotFocus» (т. Е. При загрузке окна).Я отладил и обнаружил, что событие «GotFocus» действительно было запущено, но триггер не был вызван по неизвестной причине.Затем я установил фокус в обработчике событий «Window.Loaded», он все равно не удался.
protected void WindowLoaded(object sender, RoutedEventArgs e)
{
FocusManager.SetFocusedElement(this, TextBox1); // The focus is moved to TextBox1 but the associated command is not executed.
}
Но если я установил фокус в обработчике событий «Window.Activation», все в порядке.
protected void WindowActivated(object sender, EventArgs e)
{
FocusManager.SetFocusedElement(this, TextBox1); // The focus is moved to TextBox1 and the command is executed.
}
Я очень смущен тем, что случилось.Может ли кто-нибудь объяснить это подробно?