Mvvm Light&EventToCommand-文本框LostFocus触发两次

问题描述

|| 我在表单上有几个文本框,当焦点丢失时,我想调用一个setter存储过程来保存数据,然后在我的回调函数调用一个getter存储过程,这将更新我的作业成本核算摘要形成。我正在使用Mvvm light,当我尝试在LostFocus EventTrigger上绑定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存在问题。 希望有帮助... 干杯!     ,问题不在于updateJC触发异步并且在再次触发时不完整。我希望它只发射一次。我最终只是为此窗体创建一个类,其中包含每个字段的属性。每当我更新属性时,我都会调用updateJC来收集对象并一起进行处理     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...