2009-05-08 21 views
5

Şu anda oturum açmış olan kullanıcının adını görüntüleyen bir kullanıcı kontrolüm var. Denetimdeki bir TextBlock'u, uygulamasındaki bir User odjct öğesinin UserId özelliğine bağladım.WPF Veri Nesnenin değiştirilmesi Bağlama

Ben sorunu Kullanıcı benim bağlayıcı bir kaynak her seferinde yeni bir kullanıcı günlükleri değiştirir olarak bulunur.

Ben bir olayı nerede çözüm düşünebilirsiniz

zaman Kullanıcı obejct değişiklikler ve bu nesne olmasıdır benim kontrolüm tarafından kontrol altına alınır ve sonra bu bağlamayı yeniden kurar, ancak bu idealden daha az görünür.

Bu sorunun çözümü var mı, çok yaygın olmalı?

Alkış,

James

+0

Bu, değiştiren kullanıcı nesnesi mi (eğer ayarlanmışsa?) Veya değiştiren (aynı kullanıcı örneğinde) UserId mi? –

+0

DataSource değişiyorsa, DataSource'u yeni nesneye ayarlama, ilişkili denetimleri otomatik olarak güncelleştirmelidir. Bağlı bir özellik değişiyorsa .. INotifyPropertyChanged gerekir – Gishu

cevap

7

Çoğu UI bağlamaları zaten özellikle INotifyPropertyChanged (WPF için), mülkiyet bildirimleri aracılığıyla bu işi. - yani bir tek örneğinde UserId güncelliyoruz ise:

class User : INotifyPropertyChanged { 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName) { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if(handler!=null) handler(this, new PropertyChangdEventArgs(
              propertyName)); 
    } 
    private string userId; 
    public string UserId { 
     get {return userId;} 
     set { 
      if(userId != value) { 
       userId = value; 
       OnPropertyChanged("UserId"); 
      } 
     } 
    } 
} 

Bu otomatik bağlanma güncellemeniz gerekmektedir. Eğer varsa, bunun yerine, gerçek kullanıcı örneği değiştirirken, daha sonra aynı numarayı düşünün, ama ne olursa olsun karşı kullanıcıyı barındıran:

public User User { 
    get {return user;} 
    set { 
     if(user != value) { 
      user = value; 
      OnPropertyChanged("User"); 
     } 
    } 
} 

Ve şeylerin "User.UserId" bağlanma eğer, o zaman çalışması gerekir.

İlgili konular