ListView.View在依赖项属性中为null

时间:2013-08-30 16:31:18

标签: c# wpf

我想在我们创建的从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,因此这段代码不好。

谁能告诉我我做错了什么?或者有更好的方法来设置此属性吗?

1 个答案:

答案 0 :(得分:0)

View的{​​{1}}属性本身就是一个可能会改变的依赖属性。当您设置属性时,似乎没有设置

您可能必须覆盖可排序列表视图中的ListView属性,以便添加属性更改侦听器,然后在视图本身设置时应用sort属性?

在wpf中,您可以覆盖父类中声明的依赖项属性,如下所示:http://msdn.microsoft.com/en-us/library/ms754209.aspx

您将覆盖View属性的元数据,并且在您设置的View参数中,您可以传递类似于PropertyMetadata

之类的函数

在该处理程序中,您将检查新视图是否为gridview,然后设置您的属性。

这样,设置AllowsColumnReorderPropertyChangedAllowsColumnReorder的任意顺序都会正确设置您的属性。