바인딩 (및 약간의 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 값을 업데이트합니다.
바인딩에 익숙하지 않거나 양식의 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();
}
}
이 :