Mvvm Light & EventToCommand - текстовое поле LostFocus стреляет дважды - PullRequest
2 голосов
/ 15 апреля 2011

У меня есть несколько текстовых полей в форме, которые, когда фокус потерян, я хотел бы вызвать хранимую процедуру установщика для сохранения данных, а затем в моей функции обратного вызова вызвать хранимый метод получателя, который обновит сводку стоимости работыв моей форме.Я использую 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    
}

Большое спасибо,

Скотт

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Я не видел такой проблемы раньше с EventToCommand.В вашем приложении может быть что-то необычное, что вызывает проблему.

В общем, я не полагаюсь на то, что пользовательский интерфейс делает правильные вещи.Если updateJC не должен выполняться до завершения предыдущего вызова, рассмотрите возможность добавления флага «isUpdatingJC» в вашем классе.Обновляйте JC только в том случае, если флаг имеет значение false, и установите его в значение true, прежде чем начинать обновление.Таким образом, вы не окажетесь в затруднительном положении, потому что в некоторых интерфейсах есть проблемы.

Надеюсь, это поможет ... Ура!

0 голосов
/ 19 апреля 2011

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

...