2013-08-30 3 views
1

Я хотел бы отключить запись столбцов в созданном нами элементе управления, который является производным от ListView. Этот элемент управления называется SortableListView. Я думал, что свойство зависимостей будет лучшим способом реализовать это, но ((SortableListVIew)source).View возвращает null. Вот код:ListView.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 на конкретном экземпляре зрения так что этот код не хорошо.

Может ли кто-нибудь сказать мне, что я делаю неправильно? Или есть лучший способ установить это свойство?

ответ

0

Свойство ViewListView - это свойство зависимостей, которое может измениться. Кажется, что вы не устанавливаете , когда вы настраиваете свою недвижимость?

Возможно, вам придется переопределить свойство View в вашем отсортированном виде списка, чтобы вы могли добавить прослушиватель изменений свойств, а затем применить свойство сортировки, когда сам набор будет установлен?

в МОФ, вы можете переопределить свойство зависимостей, объявленное в родительском классе, как показано здесь: http://msdn.microsoft.com/en-us/library/ms754209.aspx

вы бы переопределить метаданные для View собственности, а также в PropertyMetadata паров вы установили там, вы можете пройти такая функция, как вы, находится выше для AllowsColumnReorderPropertyChanged

В этом обработчике вы должны проверить, является ли новое представление gridview, а затем установить ваше свойство.

Таким образом, любой заказ AllowsColumnReorder или View будет установлен правильно.

+0

Я не совсем уверен, что понимаю. Как переопределить свойство View и добавить прослушиватель изменений? Извините за немой вопрос, но я довольно новичок в WPF и учусь на работе. – serlingpa

+0

обновленный ответ, чтобы включить больше информации –

+0

Большое спасибо за информацию John. У меня есть еще один вопрос: как мне получить правильный параметр для моего метода AlowsColumnReorderPropertyChanged? – serlingpa

Смежные вопросы