Windows 8将属性名称绑定到UI

时间:2014-01-24 06:03:27

标签: c# windows-8 windows-runtime winrt-xaml windows-8.1

我正在尝试使用C#和XAML将属性元数据显示名称绑定到Windows 8应用程序中的文本块。以下是代码:

C#:

[Display(Name="Customer Name")]
public string CustomerName
{
get;
set;
}

XAML:

<TextBlock Text={Binding Name[Obj.CustomerName]} />

如何将Name属性绑定到textblock的Text属性?

1 个答案:

答案 0 :(得分:0)

您无法直接执行此操作,但可以使用IValueConverter,也可以使用单独的属性。我会说第一个可能是最好的。绑定将是这样的:

<TextBlock Text="{Binding ConverterParameter='Name',Converter={StaticResource DisplayNameAnnotationConverter}}" />

然后转换器将是这样的:

public class DisplayNameAnnotationConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null)
        {
            // for Windows 8, need Type.GetTypeInfo() and GetDeclaredProperty
            // http://msdn.microsoft.com/en-us/library/windows/apps/br230302%28v=VS.85%29.aspx#reflection
            // http://msdn.microsoft.com/en-us/library/windows/apps/hh535795(v=vs.85).aspx
            var prop = value.GetType().GetTypeInfo().GetDeclaredProperty((string)parameter);
            if (prop != null)
            {
                var att = prop.GetCustomAttributes(false).OfType<DisplayAttribute>().FirstOrDefault() as DisplayAttribute;
                if (att != null)
                    return att.DisplayName;
            }
        }
        return DependencyProperty.UnsetValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

不要忘记在您的资源中包含转换器:

<Application.Resources>
    <local:DisplayNameAnnotationConverter x:Key="DisplayNameAnnotationConverter" />
</Application.Resources>