我正在玩WPF和数据绑定,我想知道以下内容。 我定义了一些PropertyGroupDescriptions,但现在我想知道如何从IValueConverter中读取PropertyName。 这可能吗?
答案 0 :(得分:1)
你做不到。 IValueConverter interface没有任何方法可以获取正在转换的属性。
将PropertyInfo或PropertyDescriptor实例传递给Convert和ConvertBack方法可能会很好,但设计人员认为没有必要。< / p>
解决这个问题的唯一方法是在代码中设置IValueConverter实现,然后在构造实现时,可以传递附加IValueConverter接口实现的属性。
答案 1 :(得分:0)
总是通过绑定的ConverterParameter传递名称的廉价方式,尽管这并不是一种“干净”的方式。
答案 2 :(得分:0)
也许我应该详细说明一下。我的xaml中有以下组:
<CollectionViewSource x:Key="cvsTasks" Source="{StaticResource tasks}" Filter="CollectionViewSource_Filter" >
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="ProjectName" />
<PropertyGroupDescription PropertyName="TaskName" />
<PropertyGroupDescription PropertyName="Complete" />
</CollectionViewSource.GroupDescriptions>
和
<TextBlock FontWeight="Bold" Text="{Binding Path=Name}"/>
现在我想在Name上对转换器进行限制,这很好,但我只希望它实际上在属性Complete上工作。这样做的最佳方式是什么?
我最终得到的代码如下:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
if (value.GetType().Equals(typeof(Boolean)))
{
return (bool)value ? "Complete" : "Active";
}
if (value.GetType().Equals(typeof(String)))
{
return value as string;
}
}
return null;
}
似乎,错了。