我在表单上有几个文本框,当焦点丢失时,我想调用一个setter存储过程来保存数据,然后在我的回调函数中调用一个getter存储过程,这将更新表单上的作业成本核算摘要。我使用的是Mvvm light,当我尝试在LostFocus EventTrigger上绑定(bind)EventToCommand时,我的命令被触发了两次。

我知道这是由于事件冒泡引起的,但是我不确定如何确保我的方法实际上只触发过一次。这是我的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
}

非常感谢,

史考特

最佳答案

我之前没有用EventToCommand看到过这个问题。您的应用中可能有一些时髦的东西导致了问题。

通常,我不依靠UI来做正确的事。如果在上一个调用完成之前不应执行updateJC,请考虑在类中添加“isUpdatingJC”标志。仅在标志为false时更新JC,并在开始更新之前将其设置为true。这样一来,您就不会陷入困境,因为某些UI存在问题。

希望有帮助...
干杯!

关于silverlight - Mvvm Light和EventToCommand-文本框LostFocus触发两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5671180/

10-10 19:11