我目前有两个接受任何号码的文本框.我有一个文本块,它输入两个数字并计算平均值.
我想知道是否有办法将这个文本块绑定到两个文本框并使用自定义转换器来计算平均值?我目前正在捕获两个文本框上的文本更改事件并计算平均值,但我认为数据绑定会更有效,更容易.
你在找MultiBinding
.
你的XAML
遗嘱看起来像这样:
随着合理的替代品myConverter
,myFirst.Value
和mySecond.Value
.
创建一个实现IMultiValueConverter的转换器.它可能看起来像这样:
class AverageConverter : IMultiValueConverter { #region IMultiValueConverter Members public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { int total = 0; int number = 0; foreach (object o in values) { int i; bool parsed = int.TryParse(o.ToString(), out i); if (parsed) { total += i; number++; } } if (number == 0) return 0; return (total/number).ToString(); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion }
多值转换器接收一个对象数组,每个绑定对应一个对象数组.您可以根据需要处理这些,具体取决于您是打算使用double还是int或者其他什么.
如果两个文本框是数据绑定,则可以在文本块的多重绑定中使用相同的绑定(记住在属性更改时通知以便更新平均值),或者可以通过按ElementName引用文本框来获取文本值.