2016-03-23 16 views
0

MVVM desenini kullanacak bir Wpf projesinde yeni başladım. Ben ilk modeli yapılmış, ancak benzeri normal bir web modeline kıyasla vermişlerdir: Onlar INotifyPropertyChanged uygulayan çünküWpf MVVM modelleri, OnPropertyChanged yöntemini anlamak, snippet'leri kullanabilir misiniz?

public string name {get;set;} 

Bu modeller biraz daha karmaşıktır.

Bir müşteri modelini oluşturduk

:

private void OnPropertyChanged(string v) 
{ 
    throw new NotImplementedException(); 
} 
: Bana göre bir yöntem oluşturmak için görsel stüdyo 2015 seçerseniz, şöyle bir şey olsun, biraz kafam karıştı Sonra

public class Customer : INotifyPropertyChanged 
{ 
    // Initizalize default construcktor 
    public Customer(string CustomerName) 
    { 
     Name = CustomerName; 
    } 

    private string _Name; 

    public string Name 
    { 
     get 
     { 
      return _Name; 
     } 
     set 
     { 
      _Name = value; 
      OnPropertyChanged("Name"); 
     } 
    } 

} 

Yöntemde neler olmalı? Görsel stüdyo bunu bir pasajla sizin için yapamaz mı? "ctor" yapıcı pasajı gibi mi?

Birisi bana biraz hileler verebilir, süreci anlamak için biraz daha kolaylaştırabilir.

cevap

2

INotifyPropertyChanged arabirimini uygulamanız gerekir. Aşağıdaki uygulamanın, özellik adından geçmek zorunda kalmadan OnPropertyChanged() (yöntem imzasındaki CallerMemberName özniteliğinin kullanımı nedeniyle) çağrılmasına olanak sağladığını unutmayın, bu da hataları azaltmaya ve yeniden oluşturmayı daha kolay hale getirmeye yardımcı olur. aynı zamanda modelleri devralır INotifyPropertyChanged uygulamak için bir soyut temel sınıf oluşturmak için yaygın bir uygulama olduğunu

public class Customer : INotifyPropertyChanged 
{ 
    // Initizalize default construcktor 
    public Customer(string CustomerName) 
    { 
     Name = CustomerName; 
    } 

    private string _Name; 

    public string Name 
    { 
     get 
     { 
      return _Name; 
     } 
     set 
     { 
      _Name = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected internal void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Not. Bu şekilde, her model için bunu uygulamak zorunda kalmazsınız ve çok fazla kodunuz olur.

+0

Merhaba, Cevabınız için teşekkürler. Burada yaptığınız gibi sadece bir OnPropertyChanged yöntemi yapmak zorunda mısın? ya da tüm özellikler için yaratmalısınız. – Mikkel

+0

@Mikkel, sadece bir yöntem. – WasGoodDone

+0

ArayanMemberName, burada ne demek istiyorsun? OnPropertyChanged ("Ad") çağırırsam; İçine ne yazmalı? – Mikkel