http://blogs.wankuma.com/naka/archive/2007/09/18/96638.aspx
2段階バインドをコンバータを通して安全に実現してみる方法
///
/// Nullの場合には""を返すコンバータ
///
public class Null許容パラメータConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//パラメータはstringのみ
string ParameterString = parameter as string;
if (ParameterString == null)
{
return DependencyProperty.UnsetValue;
}
//valueがNullの場合には空文字列を返す
if (value == null)
{
return "";
}
//Nullでないのでパラメータの文字列の子要素があるかどうかを調べる
Type t = value.GetType();
PropertyInfo pinfo = t.GetProperty(ParameterString);
if ( pinfo == null )
{
//プロパティ情報が取得できない
return DependencyProperty.UnsetValue;
}
return pinfo.GetValue(value, null);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}