我有一个必须在执行事件之前TextBox
更新其中的属性,因为在事件中我使用属性的值进行计算。Text
LostFocus
LostFocus
Text
目前,当输入LostFocus
事件 ( txtTotaisNfe_LostFocus
)时,ThisDataContext.DescontoTotal
其值尚未更新。
PS:我不能使用UpdateSourceTrigger = PropertyChanged
,因为我PriceConverter1
在 WPF 中使用了一个转换器(),它只能在我在TextBox
. 它将输入的值转换为 2 个十进制值(即运行时LostFocus
)。
问题是: .NET 进程队列中是否有任何方法可以理解它必须先运行LostFocus
fromUpdateSourceTrigger
再运行( 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;
}
}