2013-10-29 20 views
7

Görüntümodemde kullanıcı girdisini doğrulıyorum ve herhangi bir değer için doğrulama başarısız olursa doğrulama iletisini atarım.MVVM kullanarak bir WPF Denetimine Odaklama nasıl ayarlanır?

Odağı, yalnızca doğrulama işleminin başarısız olduğu belirli bir denetime ayarlamam gerekiyor.

Bunu nasıl başarırsınız? Sonra

<TextBox Attached:TextBoxProperties.IsFocused="{Binding IsFocused}" ... /> 

biz edebilirsiniz:

public static DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached("IsFocused", typeof(bool), typeof(TextBoxProperties), new UIPropertyMetadata(false, OnIsFocusedChanged)); 

public static bool GetIsFocused(DependencyObject dependencyObject) 
{ 
    return (bool)dependencyObject.GetValue(IsFocusedProperty); 
} 

public static void SetIsFocused(DependencyObject dependencyObject, bool value) 
{ 
    dependencyObject.SetValue(IsFocusedProperty, value); 
} 

public static void OnIsFocusedChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) 
{ 
    TextBox textBox = dependencyObject as TextBox; 
    bool newValue = (bool)dependencyPropertyChangedEventArgs.NewValue; 
    bool oldValue = (bool)dependencyPropertyChangedEventArgs.OldValue; 
    if (newValue && !oldValue && !textBox.IsFocused) textBox.Focus(); 
} 

Bu özellik aşağıdaki gibi kullanılır: MVVM metodolojisine bağlı kalarak bir UI olay kullanmak istediğinizde

+0

Konsept: AttachedBehavior veya Custom Control yapın - true olarak ayarlandığında bu kontrole odaklandığınızda ve false değerine ayarladığınızda yeni bir bağımlılık özelliğine sahip olursunuz; – bland

+1

Kullanıcı girişi için, kontrol zaten odaklanmış durumda, değil mi? Kontrol değerlerinin programatik değişimleri için, sadece bir kontrolün doğrulanamamasını nasıl sağlıyorsunuz? Birden çok kontrol doğrulamayı geçersiz kılacak olursa, odaklanmak için seçilen kişi hangisidir? – elgonzo

cevap

12

Genellikle, biz Attached Property oluşturmak IsFocused özelliğini true olarak değiştirerek TextBox odaklama modeline odaklanın.

IsFocused = false; // You may need to set it to false first if it is already true 
IsFocused = true; 
+1

Aslında yaptın :) – Noctis

+2

@Sheridan: nasıl typeof (TextBoxProperties) atıfta bulunuyorsun? Bu – user2519971

+0

'a erişmek için gereken ad alanı anlamına gelir. Tam bir açıklama için lütfen MSDN'deki [Attached Properties Overview] (http://msdn.microsoft.com/en-us/library/ms749011.aspx) sayfasını okuyun. Kısa açıklama, bu özelliği tanımladığım sınıftır. 'Attached' bu sınıfın ad alanıdır. Bu nedenle mülke şu şekilde erişilir: 'Attached: TextBoxProperties.IsFocused'. – Sheridan