К сожалению, Silverlight не хватает нескольких штук, которые есть в WPF, чтобы справиться с этим. Я бы, вероятно, пошел по пути использования конвертера значений, чтобы вы могли передать класс, содержащий заголовок и автора, для форматирования текста.
Вот код:
public class TitleAuthorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (!(value is Book)) throw new NotSupportedException();
Book b = value as Book;
return b.Title + " - " + b.Author;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
}
И немного XAML:
<Grid x:Name="LayoutRoot" Background="White">
<Grid.Resources>
<local:Book Title="Some Book" Author="Some Author" x:Key="MyBook"/>
<local:TitleAuthorConverter x:Key="Converter"/>
</Grid.Resources>
<TextBlock DataContext="{StaticResource MyBook}" Text="{Binding Converter={StaticResource Converter}}"/>
</Grid>
Недостатком этого способа является то, что текст не будет обновляться при изменении свойств (т. Е. Вы реализуете INotifyPropertyChanged), поскольку поле привязано к классу.
Как предлагается в комментариях к вопросу, вы также можете создать третье свойство, которое объединяет их. Это позволит обойтись без использования мультибиндингов или преобразователей значений.