微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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来收集对象并一起进行处理     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。