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 であるため、メソッドが EnabledColumnReoder の設定に失敗することです。コードはもともと OnInitialized で次のように見えたため、キャストが有効であることは確かです。
((GridView)this.View).AllowsColumnReorder = false;
...しかし、ビューの特定のインスタンスに allowColumnReorder を設定する必要があるため、このコードは役に立ちません。
誰が私が間違っているのか教えてもらえますか? または、このプロパティを設定するより良い方法はありますか?