WPF-xaml计算文本框值总数

WPF-xaml计算文本框值总数

问题描述:

我有一个wpf xaml表单,其中有5个文本框显示订单价格。 在5个文本框下面我有另一个文本框:[subTotal]显示订单价格的小计。“SubTotal”文本框应该自动显示订单价格的小计。WPF-xaml计算文本框值总数

是否有任何XAMl编码方式,当用户在订单价格文本框中输入值时,我可以自动计算和显示“SubTotal”文本框中的总数。

如果你使用绑定(和一个小MVVM模式),这将是相当容易的。表单的DataContext的设置是这样的:

using System; 
using System.ComponentModel; 

namespace WpfApplication1 
{ 
    [Serializable] 
    public class TestViewModel : INotifyPropertyChanged 
    { 
     private decimal value1; 
     private decimal value2; 
     private decimal value3; 
     private decimal value4; 
     private decimal value5; 

     public TestViewModel() 
     { 
     } 

     public decimal Value1 
     { 
      get { return value1; } 
      set 
      { 
       value1 = value; 
       RaisePropertyChangedEvent("Value1"); 
       RaisePropertyChangedEvent("SubTotal"); 
      } 
     } 
     public decimal Value2 
     { 
      get { return value2; } 
      set 
      { 
       value2 = value; 
       RaisePropertyChangedEvent("Value2"); 
       RaisePropertyChangedEvent("SubTotal"); 
      } 
     } 
     public decimal Value3 
     { 
      get { return value3; } 
      set 
      { 
       value3 = value; 
       RaisePropertyChangedEvent("Value3"); 
       RaisePropertyChangedEvent("SubTotal"); 
      } 
     } 
     public decimal Value4 
     { 
      get { return value4; } 
      set 
      { 
       value4 = value; 
       RaisePropertyChangedEvent("Value4"); 
       RaisePropertyChangedEvent("SubTotal"); 
      } 
     } 
     public decimal Value5 
     { 
      get { return value5; } 
      set 
      { 
       value5 = value; 
       RaisePropertyChangedEvent("Value5"); 
       RaisePropertyChangedEvent("SubTotal"); 
      } 
     } 
     public decimal SubTotal 
     { 
      get 
      { 
       return this.value1 + this.value2 + this.value3 + this.value4 + this.value5; 
      } 
     } 

     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 
     private void RaisePropertyChangedEvent(string propertyName) 
     { 
      if (this.PropertyChanged != null) 
       this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 

     #endregion 
    } 
} 

显然,有很多不同的方法可以做到这一点,但如果你绑定您的文本框的值在这里,当1个文本框被改变了它会告诉查看(通过PropertyChanged事件)值和SubTotal已更新。然后屏幕将根据计算结果更新SubTotal的显示值。

如果您不熟悉绑定或如何设置表单的DataContext,我可以对此进行扩展。

使用该转换器:

public class SumConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, 
     object parameter, System.Globalization.CultureInfo culture) 
    { 
     double _Sum = 0; 
     if (values == null) 
      return _Sum; 
     foreach (var item in values) 
     { 
      double _Value; 
      if (double.TryParse(item.ToString(), out _Value)) 
       _Sum += _Value; 
     } 
     return _Sum; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, 
     object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

这样做:

<Window.Resources> 
    <local:SumConverter x:Key="MySumConverter" /> 
</Window.Resources> 
<StackPanel> 
    <TextBox Name="TextBox1" Text="1" /> 
    <TextBox Name="TextBox2" Text="2" /> 
    <TextBox Name="TextBox3" Text="3" /> 
    <TextBox Name="TextBox4" Text="4" /> 
    <TextBox Name="TextBox5" Text="5" /> 
    <TextBlock> 
     <TextBlock.Text> 
      <MultiBinding Converter="{StaticResource MySumConverter}" 
          StringFormat="{}{0:C}" 
          FallbackValue="Error" TargetNullValue="Null"> 
       <Binding Path="Text" ElementName="TextBox1" /> 
       <Binding Path="Text" ElementName="TextBox2" /> 
       <Binding Path="Text" ElementName="TextBox3" /> 
       <Binding Path="Text" ElementName="TextBox4" /> 
       <Binding Path="Text" ElementName="TextBox5" /> 
      </MultiBinding> 
     </TextBlock.Text> 
    </TextBlock> 
</StackPanel> 

的样子:

screenshot