我正在制作一个具有价格字段的 Windows Phone 应用程序。一旦用户开始输入我想更新一些其他的文本框。我正在使用 mvvm light 所以通常在用户离开文本框之前属性不会更新。
这对我不起作用,所以我找到了它并实现了它,但不是我有一个奇怪的问题,我不明白为什么。
当我在框 50 中键入时,属性首先更新为“5”,然后更新为“50”,这是预期的,但当我第一次“。”时。什么都没有被触发,然后当我输入 5 时,该属性似乎被击中了 3 次,一旦完成,它会将光标移回文本框的乞求处。
所以我得到 90.5 而不是 0.59
代码背后
private void txtPrice_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
TextBox textBox = sender as TextBox;
textBox.Text = "";
}
private void txtPrice_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
// Update the binding source
BindingExpression bindingExpr = textBox.GetBindingExpression(TextBox.TextProperty);
bindingExpr.UpdateSource();
}
在模型中
/// <summary>
/// The <see cref="Price" /> property's name.
/// </summary>
public const string PricePropertyName = "Price";
private decimal price = 0.00M;
/// <summary>
/// Sets and gets the Price property.
/// Changes to that property's value raise the PropertyChanged event.
/// </summary>
public decimal Price
{
get
{
return price;
}
set
{
if (price == value)
{
return;
}
RaisePropertyChanging(() => Price);
price = value;
RaisePropertyChanged(() => Price);
}
}
XAML
<TextBox x:Name="txtPrice" Margin="157,16,102,0" TextWrapping="Wrap" VerticalAlignment="Top" InputScope="Number" Text="{Binding WeightConversion.Price, Mode=TwoWay, UpdateSourceTrigger=Explicit}" Tap="txtPrice_Tap" TextChanged="txtPrice_TextChanged" />