我想在我们创建的从 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 始终为空,因此该方法无法设置 AllowsColumnReoder。我很确定强制转换是有效的,因为代码在 OnInitialized 中最初看起来像这样:
((GridView)this.View).AllowsColumnReorder = false;
...但我需要在视图的特定实例上设置 AllowsColumnReorder,所以这段代码不好。
谁能告诉我我做错了什么?或者有没有更好的方法来设置这个属性?