オブジェクトの名前をnullにすることができるクラスがあります。 SilverlightのリストボックスでSilverlightで最初の値がnullの場合の2番目のプロパティへのバインド
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; }
}
、私は私がのTextBlockにバインドされた名前持ってDataTemplateを使用します。名前がnullの場合しかし、これは明らかに非常に良い見ていない
<DataTemplate x:Key="ThingTemplate">
<Grid>
<TextBlock TextWrapping="Wrap" Text="{Binding Name}" />
</Grid>
</DataTemplate>
を。理想的には、
string textBlockContent = thing.Name != null ? thing.Name : thing.Identifier;
と同等のものを使用したいと思いますが、モデルオブジェクトを変更することはできません。これを行う良い方法はありますか?
私はConverterを使うことを考えましたが、Nameプロパティではなく、オブジェクト自体にコンバータをバインドする必要があります。これは問題ありませんが、NameまたはIdentifierのいずれかが変更されたら、どのように再バインドしますか? IValueConverter
は、オブジェクトのINotifyPropertyChanged
イベントを手動でリッスンすると、再変換を強制する方法がないようです。
これを行う最善の方法に関するお考えですか?
を
Instance
かName
のいずれかを返すコンバータを使用[Equiv。 (XAMLバインディングのCoalesce()へ)?](http://stackoverflow.com/questions/6947728/equiv-to-coalesce-in-xaml-binding) –具体的にしてください。それはSilverlight、またはWPFですか? – Nawaz
私が知る限り、コードを変更することなくこれを行うことはできません。厳密にXAMLを使用する方法が見つかった場合は、おそらくハックと見なされます。 – qJake