Créez un convertisseur qui implémente IMultiValueConverter. Cela pourrait ressembler à quelque chose comme ceci :
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
}
Un convertisseur multivalue reçoit un tableau d'objets, un pour chacune des liaisons. Vous pouvez traiter ces objets de la manière dont vous le souhaitez, selon qu'il s'agit d'un double, d'un int ou autre.
Si les deux zones de texte sont liées à des données, vous pouvez utiliser les mêmes liaisons dans la liaison multiple pour votre bloc de texte (en n'oubliant pas d'avertir lorsque la propriété change afin que votre moyenne soit mise à jour), ou vous pouvez obtenir la valeur du texte en faisant référence aux zones de texte par 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>