【发布时间】:2016-01-11 19:54:20
【问题描述】:
我有一个名为 CategoryToGridViewConverter 的 IValueConverter,它有一个名为 ListViewWidthProperty 的 DependencyProperty。我还从DependencyObject 继承了我的转换器,以便它可以与 DependencyProperties 一起使用。这是我的转换器的定义方式:
internal class CategoryToGridViewConverter : DependencyObject, IValueConverter
{
public static readonly DependencyProperty ListViewWidthProperty = DependencyProperty.Register("ListViewWidth", typeof (double),
typeof (CategoryToGridViewConverter), new PropertyMetadata(0d, PropertyChangedCallback));
private static void PropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
Debug.WriteLine("ListViewWidth: " + dependencyPropertyChangedEventArgs.NewValue);
}
public double ListViewWidth {
get { return (double)GetValue(ListViewWidthProperty); }
set { SetValue(ListViewWidthProperty, value); }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//Not relevant
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
//Not relevant
}
}
}
很简单。然后我在 XAML(在 ListView 资源部分)中创建这个转换器,如下所示:
<ListView Grid.Row="0" BorderThickness="0"
ItemsSource="{Binding SelectedCategory.Entries}"
x:Name="listView"
SizeChanged="ListView_OnSizeChanged">
<ListView.Resources>
<local:CategoryToGridViewConverter x:Key="CategoryToGridViewConverter" ListViewWidth="{Binding listView, Path=Width, Mode=OneWay}"/>
</ListView.Resources>
<ListView.View>
<Binding Path="SelectedCategory" Converter="{StaticResource CategoryToGridViewConverter}"/>
</ListView.View>
</ListView>
但问题是ListViewWidth 永远不会更新。它始终保持在 0。但有问题的 ListView 显然没有 0 宽度。
我做错了什么?
编辑:它还在输出屏幕上给出了绑定错误:
System.Windows.Data 错误:2:找不到管理 FrameworkElement 或 FrameworkContentElement 为目标元素。 绑定表达式:路径=宽度;数据项=空;目标元素是 'CategoryToGridViewConverter' (HashCode=33594544);目标属性是 'ListViewWidth'(输入'Double')
DependencyProperties 是否仅适用于 FrameworkElements?如果是这样,我的转换器如何知道 ListView 的宽度?
【问题讨论】:
-
据我所知,
DependencyProperty只能在DependencyObject中声明。例如,这是给你SetValue和GetValue的类。如果您只有CategoryToGridViewConverter的IValueConverter接口,我真的不明白这是如何编译的。您能否通过转换器的完整实施更新您的答案? -
我已经更新了我的问题
-
谢谢,能否请您也插入转换器的用法?我可以看到您将其放入
Resources集合或ResourceDictionary,但您想在哪里使用它? -
我又更新了。 :)
标签: wpf data-binding dependency-properties