1

我有一个必须在执行事件之前TextBox更新其中的属性,因为在事件中我使用属性的值进行计算。TextLostFocusLostFocusText

目前,当输入LostFocus事件 ( txtTotaisNfe_LostFocus)时,ThisDataContext.DescontoTotal其值尚未更新。

PS:我不能使用UpdateSourceTrigger = PropertyChanged,因为我PriceConverter1在 WPF 中使用了一个转换器(),它只能在我在TextBox. 它将输入的值转换为 2 个十进制值(即运行时LostFocus)。

问题是: .NET 进程队列中是否有任何方法可以理解它必须运行LostFocusfromUpdateSourceTrigger 运行( LostFocus) txtTotaisNfe_LostFocus

WPF代码(DescontoTotal = ThisDataContext.Desconto)

<TextBox Text="{Binding DescontoTotal, Converter={StaticResource PriceConverter1}, Mode=TwoWay, UpdateSourceTrigger=Explicit}" LostFocus="txtTotaisNfe_LostFocus"/>

LostFocus事件代码:

private void txtTotaisNfe_LostFocus(object sender, RoutedEventArgs e)
{
    //Rateia o Total de Desconto da NFe entre os Produtos.
    foreach (var item in _lsProdutos)
    {
        item.Desconto = (ThisDataContext.DescontoTotal / ThisDataContext.TotalProdutos * item.ValorProduto).Round();
    }
}

PriceConverter1 代码(请忽略此处的最佳实践):

public class PriceConverter1 : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null)
            {
                try
                {
                    return ((decimal)value).ToString("##,###,##0.00");
                }
                catch
                {
                    return "0.00";
                }
            }
            else
            {
                return "0.00";
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string price = value.ToString();

            decimal result;
            if (decimal.TryParse(price, System.Globalization.NumberStyles.Any, null, out result))
            {
                return result;
            }
            return value;
        }
    }
4

0 回答 0