获取绑定属性的属性信息



我想要实现的是为属性指定特定的值,这些值只能在设计器中显示,而不能在运行时显示。


所以在我的ViewModels中,我想用自定义属性来装饰属性

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class DesignTimeValueAttribute : Attribute
{
public object Value { get; }
public DesignTimeValueAttribute(object value)
{
this.Value = value;
}
}

例如:

private string test;
[DesignTimeValue("Hello World")]
public string Test
{
get { return this.test; }
set
{
if(this.test != value)
{
this.test = value;
this.RaisePropertyChanged();
}
}
}

在XAML部分,我想绑定到这样的属性:

<Window.Resources>
<DesignTimeValueConverter x:Key="DesignTimeValueConverter" />
</Window.Resources>
<Grid>
<TextBox Text="{Binding Test, Converter={StaticResource DesignTimeValueConverter}}" />
</Grid>

到目前为止还不错。DesignTimeValueConverter应该看起来像这样(伪代码(:

public class DesignTimeValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (DesignerProperties.GetIsInDesignMode(this))
{
PropertyInfo propertyInfo = ...; // What can I put here?
DesignTimeValueAttribute attribute = propertyInfo.GetCustomAttribute<DesignTimeValueAttribute>();
if(attribute != null)
{
return attribute.Value;
}
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}

但我不知道是否有一种方法可以获取绑定属性CCD_ 2。


如何访问IValueConverter中的实际属性,而不仅仅是值及其类型

我可以传递什么作为转换器参数,例如我可以使用吗

<TextBox Text="{Binding Test, Converter={StaticResource DesignTimeValueConverter}, ConverterParameter=???}" />

如果是,我应该通过什么?

要从DesignTimeValueAttribute获取属性值,值转换器必须使用反射,如下所示:

((DisplayAttribute(typeof(className).GetProperty(propertyName).GetCustomAttribute(typeof(DisplayAttribute)))).DesignTimeValue;

要使用反射,需要两件事:

  1. 这些属性所在的类的名称
  2. 物业名称

您可以将类名的DependencyProperty添加到值转换器中,也可以创建MultiValueConverter并将类名作为绑定之一传递。

<UserControl.Resources>
<local:DesignTimeValueConverter x:Key="myDesignTimeValueConverter" ClassName="MyNamespace.MyClass" />
</UserControl.Resources>

然后在属性上使用转换器,并将属性名称作为ConverterParameters:传递

<TextBlock Text="{Binding Test, Converter={StaticResource myDesignTimeValueConverter}, ConverterParameter=Test}" />

相关内容

  • 没有找到相关文章

最新更新