WPF

2016-03-20 21 views
0

'deki bağımlılık özellikleri arasındaki fark WPF'de iki bağımlılık özelliği var. Birincisi, internette bulduğu: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)) 
     } 
    } 
} 

Ve ikincisi, propdp pasajı gelen:

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)); 
} 

aralarındaki fark nedir? Ne kullanmalıyım?

+1

Birincisi bir bağımlılık özelliği değil. Tüm ayrıntılar için MSDN'deki [Bağımlılık Özelliklerine Genel Bakış] (https://msdn.microsoft.com/en-us/library/ms752914 (v = vs.100) .aspx) makalesini, özellikle normal özelliklerle ilgili farkları okuyun. . – Clemens

cevap

2

'a INotifyPropertyChanged uygulayabileceğiniz bir değer ekleyebilirsiniz. Örneğin,

yazıyorsanız, İçerik, bağlama kaynağının değişmesine tepki verecek bir bağımlılık özelliğidir.

temel fark GetValue() metodu çağırarak zaman DependencyProperty değeri dinamik çözülene ise normal bir .NET özelliğinin değeri, sınıfında özel üyesinin doğrudan okuma olduğu, olduğu Bu, DependencyObject öğesinden devralındı.

bir bağımlılık özelliği değerini sizin nesnenin alanında depolanan, ancak anahtarların ve değerlerin bir sözlükte taban sınıfı DependencyObject tarafından sağlanmaz set

. Bir girdinin anahtarı, isminin adıdır ve değer, ayarlamak istediğiniz değerdir.

via

Size özel kullanıcı tanımlayacak WPF nesneleri (Content, Background, IsChecked ve diğer birçok DP dahil içinde bağımlılık özelliklere bağlanmak edeceğiz senin ViewModels basit özelliklerini kullanmalıdır kontroller).

+0

Yani, ViewModels'ımda basit özellikleri kullanmalıyım. Ama ilk örnekte olduğu gibi OnPropertyChanged'a ihtiyacım var mı? Özel metin kutusu, resim vb. Gibi yalnızca özel denetimlerinizde kullanılan bağımlılık özelliğini doğru anlıyor musunuz? –

+0

Veri bağlama özelliğini kullanmak ve özellik değiştiğinde kullanıcı arayüzünüzde bir tepki vermek istiyorsanız, INPC'yi uygulamanız ve değer değiştiğinde ProprtyChanged olayını yükseltmeniz gerekir (örneğinizde olduğu gibi). Ve evet bağımlılık özellikleri XAML sözdiziminde kullanılmasına izin veriyorsa, bunu başka senaryolarda kullanmanın bir nedeni yoktur. –