我想在我们创建的从ListView派生的控件中禁用列重写。此控件称为SortableListView
。我认为依赖属性是实现此方法的最佳方式,但((SortableListVIew)source).View
正在返回null
。这是代码:
public class SortableListView : ListView
{
// ...lots of other properties here
public static readonly DependencyProperty AllowsColumnReorderProperty =
DependencyProperty.Register(
"AllowsColumnReorder",
typeof(bool),
typeof(SortableListView),
new UIPropertyMetadata(true, AllowsColumnReorderPropertyChanged));
public bool AllowsColumnReorder
{
get
{
return (bool)this.GetValue(AllowsColumnReorderProperty);
}
set
{
this.SetValue(AllowsColumnReorderProperty, value);
}
}
private static void AllowsColumnReorderPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
ViewBase vb = ((SortableListView)source).View;
if (vb != null)
{
((GridView)vb).AllowsColumnReorder = (bool)e.NewValue;
}
}
和XAML:
<TableControls:SortableListView x:Name="QueueViewTable" Margin="0,0,0,0"
Style="{StaticResource ListViewStyle}"
ItemsSource="{Binding Path=QueueList}"
ItemContainerStyle="{StaticResource alternatingListViewItemStyle}"
AlternationCount="2"
SelectionMode="Single"
SortEnabled="False"
AllowsColumnReorder="false">
问题是vb始终为null,因此该方法无法设置allowsColumnReoder。我很确定演员表是有效的,因为代码最初在OnInitialized中看起来像这样:
((GridView)this.View).AllowsColumnReorder = false;
...但是我需要在视图的特定实例上设置allowsColumnReorder,因此这段代码不好。
谁能告诉我我做错了什么?或者有更好的方法来设置此属性吗?
答案 0 :(得分:0)
View
的{{1}}属性本身就是一个可能会改变的依赖属性。当您设置属性时,似乎没有设置 ?
您可能必须覆盖可排序列表视图中的ListView
属性,以便添加属性更改侦听器,然后在视图本身设置时应用sort属性?
在wpf中,您可以覆盖父类中声明的依赖项属性,如下所示:http://msdn.microsoft.com/en-us/library/ms754209.aspx
您将覆盖View
属性的元数据,并且在您设置的View
参数中,您可以传递类似于PropertyMetadata
在该处理程序中,您将检查新视图是否为gridview,然后设置您的属性。
这样,设置AllowsColumnReorderPropertyChanged
或AllowsColumnReorder
的任意顺序都会正确设置您的属性。