1 つの方法は、を実装するクラスである multivalueconverter を使用することIMultiValueConverter
です。multivalueconverter を使用すると、複数の値にバインドできます。つまり、viewmodel とTextBlock
valueconverter 内のテキストの両方への参照を取得できます。
GetIsUnderlined
ビューモデルに、テキストに下線を引く必要があるかどうかを示す true または false を返すメソッドが呼び出されると仮定すると、valueconverter は次の行に沿って実装できます。
class UnderlineValueConverter : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var viewmodel = values[0] as Window1ViewModel;
var text = values[1] as string;
return viewmodel.GetIsUnderlined(text) ? TextDecorations.Underline : null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
この valueconverter は、 に対して次のように使用できますTextBlock
。
<Grid x:Name="grid1" >
<Grid.Resources>
<local:UnderlineValueConverter x:Key="underlineValueConverter" />
</Grid.Resources>
<TextBlock Text="Blahblah">
<TextBlock.TextDecorations>
<MultiBinding Converter="{StaticResource underlineValueConverter}">
<Binding /> <!-- Pass in the DataContext (the viewmodel) as the first parameter -->
<Binding Path="Text" RelativeSource="{RelativeSource Mode=Self}" /> <!-- Pass in the text of the TextBlock as the second parameter -->
</MultiBinding>
</TextBlock.TextDecorations>
</TextBlock>
</Grid>