#silverlight #mvvm #mvvm-light
#silverlight #mvvm #mvvm-индикатор
Вопрос:
У меня есть несколько текстовых полей в форме, в которых при потере фокуса я хотел бы вызвать хранимую процедуру установки для сохранения данных, затем в моей функции обратного вызова вызвать сохраненную процедуру получения, которая обновит сводку затрат на работу в моей форме. Я использую Mvvm light, и когда я пытаюсь привязать EventToCommand к LostFocus EventTrigger, моя команда выполняется дважды.
Я понимаю, что это из-за переполнения события, но я не уверен, как убедиться, что мой метод действительно запускается только один раз. Вот мой xaml:
<TextBox x:Name="txtMiles" Grid.Row="1" Width="80" Grid.Column="2" Margin="2" Text="{Binding Miles, Mode=TwoWay}" HorizontalAlignment="Center" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus">
<cmd:EventToCommand Command="{Binding UpdateJobCost}" CommandParameter="{Binding Text, ElementName=txtMiles}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
И моя ViewModel:
public RelayCommand<string> UpdateJobCost { get; set; }
public WorkOrderControlViewModel(TSMVVM.Services.IWorkOrderService workOrderService)
{
WorkOrderService = workOrderService;
RegisterCommands();
LoadData();
}
private void RegisterCommands()
{
UpdateJobCost = new RelayCommand<string>((value) => updateJC(value));
}
private void updateJC(string value)
{
//Handle Setter service call here
}
Большое спасибо,
Скотт
Ответ №1:
Я раньше не сталкивался с такой проблемой с EventToCommand. Возможно, в вашем приложении есть что-то странное, вызывающее проблему.
В общем, я не полагаюсь на пользовательский интерфейс, чтобы делать правильные вещи. Если updateJC не должен выполняться до завершения предыдущего вызова, рассмотрите возможность добавления флага «isUpdatingJC» в вашем классе. Обновляйте JC только тогда, когда флаг имеет значение false, и установите для него значение true, прежде чем приступить к обновлению. Таким образом, вы не попадаете в затруднительное положение из-за проблем с некоторыми пользовательскими интерфейсами.
Надеюсь, это поможет… Приветствую!
Комментарии:
1. Проблема была не в том, что updateJC запускался асинхронно и не был завершен при повторном запуске. Я хочу, чтобы оно срабатывало только один раз. В итоге я просто создал класс для этой формы, который содержал свойство для каждого из полей. Всякий раз, когда я обновляю свойство, я вызываю updateJC, который собирает объект и отправляет его на обработку.
Ответ №2:
Проблема была не в том, что updateJC запускался асинхронно и не был завершен при повторном запуске. Я хочу, чтобы оно срабатывало только один раз. В итоге я просто создал класс для этой формы, который содержал свойство для каждого из полей. Всякий раз, когда я обновляю свойство, я вызываю updateJC, который собирает объект и отправляет его на обработку