Одним из способов является использование многозначного преобразователя, который представляет собой класс, который реализует IMultiValueConverter
.Многозначный преобразователь позволяет вам привязать к нескольким значениям, что означает, что вы можете получить ссылку как на вашу модель представления, так и на текст вашего TextBlock
в вашем преобразователе значений.
Предполагая, что ваша модель представления имеет метод с именем GetIsUnderlined
возвращает true или false, указывая, должен ли быть подчеркнут текст, если ваш преобразователь значений может быть реализован следующим образом:
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
}
Вы можете использовать этот преобразователь значения следующим образом для 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>