【问题标题】:Mvvm Light & EventToCommand - Textbox LostFocus firing twiceMvvm Light & EventToCommand - 文本框 LostFocus 触发两次
【发布时间】:2011-04-15 00:24:49
【问题描述】:

我在表单上有几个文本框,当焦点丢失时,我想调用一个 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    
}

非常感谢,

斯科特

【问题讨论】:

    标签: silverlight mvvm mvvm-light


    【解决方案1】:

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

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

    希望对您有所帮助... 干杯!

    【讨论】:

    • 问题不在于 updateJC 触发异步并且再次触发时未完成。我希望它只触发一次。我最终只是为这个表单创建了一个类,其中包含每个字段的属性。每当我更新属性时,我都会调用 updateJC 来收集对象并发送以进行处理。
    【解决方案2】:

    问题不在于 updateJC 触发异步并且在再次触发时未完成。我希望它只触发一次。我最终只是为这个表单创建了一个类,其中包含每个字段的属性。每当我更新属性时,我都会调用 updateJC 来收集对象并发送以进行处理

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2015-09-26
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多