我在表单上有几个文本框,当焦点丢失时,我想调用一个setter存储过程来保存数据,然后在我的回调函数中调用一个getter存储过程,它会更新一个作业成本汇总在我的表格上。我正在使用Mvvm light& amp;当我尝试&在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
}
非常感谢,
斯科特
答案 0 :(得分:1)
在使用EventToCommand之前我没有看到过这个问题。您的应用中可能会出现一些引起问题的时髦。
一般来说,我不依赖UI来做正确的事情。如果在前一次调用完成之前不应执行updateJC,请考虑在类中添加“isUpdatingJC”标志。仅在标志为false时更新JC,并在开始更新之前将其设置为true。这样你就不会陷入困境,因为有些UI存在问题。
希望有帮助...... 干杯!
答案 1 :(得分:0)
问题不在于updateJC触发异步,而是在再次触发时不完整。我希望它只发射一次。我最后只为这个表单创建了一个类,其中包含每个字段的属性。每当我更新属性时,我都会调用updateJC来收集对象&amp;发送以进行处理