问题描述
||
我在表单上有几个文本框,当焦点丢失时,我想调用一个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来收集对象并一起进行处理