我有一個wpf xaml表單,其中有5個文本框顯示訂單價格。 在5個文本框下面我有另一個文本框:[subTotal]顯示訂單價格的小計。「SubTotal」文本框應該自動顯示訂單價格的小計。WPF-xaml計算文本框值總數
是否有任何XAMl編碼方式,當用戶在訂單價格文本框中輸入值時,我可以自動計算和顯示「SubTotal」文本框中的總數。
我有一個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>
的樣子: