2013-02-28 2 views
0

Как я могу использовать определенный DependencyProperty в моей CodeBehind?Использовать свойство зависимостей в коде за

Это мой DependencyProperty:

ItemContainerProperty = DependencyProperty.Register("ItemContainer", 
         typeof(ObservableCollection<Item>), typeof(Manager)); 
    } 


    public ObservableCollection<Item> ItemContainer 
    { 
     get { return (ObservableCollection<Item>)GetValue(ItemContainerProperty); } 
     set { SetValue(ItemContainerProperty, value); } 
    } 

Когда я это сделать:

for (int i = 0; i <= ItemContainer.Count - 1; i++) 
{ 
} 

Я получаю следующее ErrorMessage: Внутренняя Исключение: Ссылка на объект не указывает на экземпляр объекта.

Как я могу использовать Свойство в своем коде?

+2

Вы инициализировали ItemContainer? привязан ли он к некоторому элементу UI? что говорит отладчик? – makc

+0

@makc Как я должен инициализировать ItemContainer? Свойство не связано с элементом пользовательского интерфейса. Отладчик говорит, что в цикле for ItemContainer имеет значение null – user2025830

+0

, тогда у вас есть ответ, почему вы его не можете использовать, ваша собственность должна иметь данные/быть инициализированными, данные должны представлять некоторую бизнес-логику – makc

ответ

1

Если вы не собираетесь определять значение по умолчанию для DependencyProperty, вам необходимо установить его в какой-то момент, это значение по умолчанию равно null.

public partial class MainWindow : Window 
    { 
     public ObservableCollection<string> Items 
     { 
      get { return (ObservableCollection<string>)GetValue(ItemsProperty); } 
      set { SetValue(ItemsProperty, value); } 
     } 
     public static readonly DependencyProperty ItemsProperty = 
      DependencyProperty.Register("Items", typeof(ObservableCollection<string>), typeof(MainWindow)); 

     public MainWindow() 
     { 
      InitializeComponent(); 

      Items = new ObservableCollection<string>(); 
     } 
    } 

Если вы не хотите этого делать, вы можете определить значение по умолчанию в объявлении свойства зависимостей.

public partial class MainWindow : Window 
    { 
     public ObservableCollection<string> Items 
     { 
      get { return (ObservableCollection<string>)GetValue(ItemsProperty); } 
      set { SetValue(ItemsProperty, value); } 
     } 
     public static readonly DependencyProperty ItemsProperty = 
      DependencyProperty.Register("Items", typeof(ObservableCollection<string>), typeof(MainWindow), new PropertyMetadata(new ObservableCollection<string>())); 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
+1

Обратите внимание, что использование ссылочного типа для непустого в DP, как в вашем втором примере, может привести к очень нечетным ошибкам, поскольку WPF пытается совместно использовать одну коллекцию между все пользователи свойства (например, производные классы). Первый пример предпочтительнее в большинстве случаев. – JRoughan

+0

Я бы даже сказал, что второй пример недействителен во всех исключительных случаях. Обычно вы никогда не делаете этого. – Clemens

+0

@Clemens у вас есть подсказка для меня, почему я не могу заметить, когда зависимость свойства typ наблюдаемого коллекционирования <> является updatet привязкой? Есть что-то реализовать на мероприятии propertychange? – user2025830

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