Создать конвертер, который реализует 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.
<TextBox Text="{Binding Value1}" x:Name="TextBox1" />
<TextBox Text="{Binding Value2}" x:Name="TextBox2" />
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource AverageConverter}">
<Binding ElementName="TextBox1" Path="Text" />
<Binding ElementName="TextBox2" Path="Text" />
<!-- OR -->
<!-- <Binding Path="Value1" /> -->
<!-- <Binding Path="Value2" /> -->
</MultiBinding>
</TextBlock.Text>
</TextBlock>