У меня есть класс, в котором имя объекта может быть нулевым.
public class Thing
{
/// <summary>
/// The identifier of the thing
/// </summary>
/// <remarks>
/// This will never be null.
/// </remarks>
public string Identifier { get; set; }
/// <summary>
/// The name of the thing
/// </summary>
/// <remarks>
/// This MAY be null. When it isn't, it is more descriptive than Identifier.
/// </remarks>
public string Name { get; set; }
}
В ListBox Silverlight я использую DataTemplate, где у меня есть имя, привязанное к TextBlock:
<DataTemplate x:Key="ThingTemplate">
<Grid>
<TextBlock TextWrapping="Wrap" Text="{Binding Name}" />
</Grid>
</DataTemplate>
Однако это, очевидно, выглядит не очень хорошо, если Имя равно нулю. В идеале я хотел бы использовать что-то эквивалентное
string textBlockContent = thing.Name != null ? thing.Name : thing.Identifier;
но я не могу изменить свой модельный объект. Есть ли хороший способ сделать это?
Я думал об использовании конвертера, но мне кажется, что мне придется привязать конвертер к самому объекту, а не к свойству Name. Это было бы хорошо, но как мне тогда перепривязать, когда изменится либо Имя, либо Идентификатор? У IValueConverter
, кажется, нет никакого способа заставить преобразование, если бы я вручную прослушивал событие INotifyPropertyChanged
моего объекта.
Есть идеи, как лучше всего это сделать?