我要实现的是为属性指定特定的值,这些值只应在设计器中显示,而不应在运行时显示。
所以在我的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;
}
}
但我不知道是否有方法获取绑定的属性
PropertyInfo
.
如何访问
IValueConverter
,不仅是值及其类型?
我可以传递什么作为转换器参数,例如,我可以使用
<TextBox Text="{Binding Test, Converter={StaticResource DesignTimeValueConverter}, ConverterParameter=???}" />
如果是,我应该通过什么?