2016-03-20 2 views
0

У меня есть две реализации свойств зависимостей в WPF. Во-первых, что я нашел в Интернете:Разница между свойствами зависимостей в WPF

public class TestClass : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string propertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    private string _test; 

    public string Test 
    { 
     get 
     { 
      return _test; 
     } 
     set 
     { 
      _test = value; 
      OnPropertyChanged(nameof(Test)) 
     } 
    } 
} 

И второе, от propdp сниппета:

public class TestClass 
{ 
    public string Test 
    { 
     get { return (string)GetValue(TestProperty); } 
     set { SetValue(TestProperty, value); } 
    } 
    public static readonly DependencyProperty TestProperty =  
     DependencyProperty.Register("Test", 
     typeof(string), 
     typeof(TestClass), 
     new PropertyMetadata(string.Empty)); 
} 

В чем разница между ними? Что я должен использовать?

+1

Первый не является свойством зависимостей. Прочтите [Обзор свойств зависимостей] (https://msdn.microsoft.com/en-us/library/ms752914 (v = vs.100) .aspx) статью о MSDN для всех деталей, особенно для отличий от обычных свойств , – Clemens

ответ

2

Вы можете связать с DependencyProperty какое-то значение, которое может реализовать INotifyPropertyChanged. Например, если вы пишете:

<TextBox Content="{Binding FirstName}" /> 

then Content - свойство зависимостей, которое будет реагировать на изменение источника привязки.

Основное различие в том, что значение нормального .NET собственности читать непосредственно из частного члена в классе, в то время как значение из DependencyProperty решается динамически при вызове метода ПолучитьЗначение() который наследуется от DependencyObject.

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

via

Вы должны использовать простые свойства в ваших ViewModels которые вы будете связываться со свойствами зависимостей в объектах WPF (Content, Background, IsChecked и многие другие включают в себя DP, которые вы определите в пользовательском пользователе контроль).

+0

Итак, в моих моделях ViewModels я должен использовать простые свойства. Но нужен ли мне OnPropertyChanged для них, как в первом примере? Правильно ли я понимаю, что свойство зависимостей используется только в ваших пользовательских элементах управления, таких как пользовательское текстовое поле, изображение и т. Д.? –

+0

Если вы хотите использовать привязку данных и будете реагировать в пользовательском интерфейсе, когда свойство будет изменено, вам необходимо реализовать INPC и поднять событие ProprtyChanged, когда значение изменилось (как в вашем примере). И да, свойства зависимостей позволяют использовать его в синтаксисе XAML, тогда нет причин использовать его в других сценариях. –

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

  • Нет связанных вопросов^_^