2016-03-22 23 views
0

DataContext değiştiğinde (değiştirilmediğinde) bir TextBox'un içeriğinin nasıl değiştirileceğini biliyor musunuz? Ben de UI gibi olduğu gibi haberdar olmak istiyorum, DataContext üzerinde bir çeşit olay ile. Şimdiye kadar, bunu yapmanın bir yolunu bulamadım ve vazgeçmek ve DataContext'imdeki her bir INotifyPropertyChanged'daki tüm olaylara abone olmak üzereyim. Biliyorum, Window10 sınıfında DataContextChanged/DataContextChanging var, ancak şu ana kadar ya işe yaramıyor ya da sadece DataContext değiştirilirken yanıyor. Bunu yapmanın bir yolu var mı?DataContext değiştirildiği zaman Wpf olayı

+2

INotifyPropertyChanged TextBox çok – Domysee

+0

Teşekkür @Domysee öyle tam olarak nasıl olduğunu, yani ben soruyu soran sonra gerçekleşen budur. Pencere kendisini tüm bağlamla ilişkilendirmez, ancak INotifyPropertyChanged olan bağlı değerler. Tabii ki! Çok teşekkürler! –

cevap

0

Sorulanları düşünün. Bir veri bağlamında herhangi bir özellik değişirse, genel olayı tetiklenir.

Bu işlemi dışarıdan gerçekleştirebilen hangi işlem kullanılabilir? el ile kendilerinin bunu programlanmış sürece

Yerinden Çözüm

Özellikleri bir değişiklik bildirimini vermeyin; Bu nedenle, normalde kullanmak için neden INotifyPropertyChange yoldur.

Merkezi Çözümü

Aksi ayrı yöneticisi bütün özelliklerinin görüntüsünü alma örneğinin kapalı yansıtmak gerekir. Daha sonra bir zamanlayıcıda yönetici geçerli bir anlık görüntü için örneği yoklar ve bunu eski anlık görüntüyle karşılaştırır. Bir değişiklik tespit edilirse, bir olay başlatılabilir ve yeni anlık görüntü eskinin yerini alır. Pencere DataContext tamamen değiştirildiğinde


0

DataContextChanged etkinlik yalnızca harekete geçirilir (boş olarak grubu, ya da yeni bir örneği, vs.). Doğru yolda olduğunuzu düşünüyorum ve ViewModel'inizde NotifyPropertyChanged'a abone olmanız gerekecek. olay işleyicisi olarak, şöyle karşılık gelen mülkiyet geçiş yapabilirsiniz:

private void OnNotifyPropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    switch (e.Property) 
    { 
     case "Property1": 
      break; 
     case "Property2": 
      break; 
     case "Property3": 
      break; 
    } 
}