2017-06-05 2 views
0

Ich habe ein Programm in MVVM-Muster und ich habe eine Sicht, die einige Objekte enthält, eine davon ist eine Wert TextBox, die ValidatesOnDataErrors beim Schreiben eines Textes darin.Disable ValidatesOnDataErrors wenn IsEnabled-Eigenschaft False ist WPF

Auch ich habe eine Bindung zu seiner IsEnabled-Eigenschaft, die auf dem ViewModel von einigen Bedingungen, die ich gemacht habe, geändert.

Ich möchte ValidatesOnDataErrors eliminieren (make false), wenn die bindende Eigenschaft von IsEnabled False ist, wie kann ich das tun?

<StackPanel> 
    ..... 

    <TextBox Text="{Binding Path=Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}" IsEnabled="{Binding isValueFieldEnable}"/> 

    ..... 

</StackPanel> 

Vielen Dank.

+0

Sie können die gesamte 'Text'-Bindung in 'DataTrigger' im' TextBox'-Stil ändern, wenn 'isValueFieldEnable' zu' false' wird. – Maxim

+1

Einfach Ihre 'IDataErrorInfo' sollte" kein Fehler "zurückgeben, wenn Ihr' isValueFieldEnable' falsch ist –

+0

@IlVic Sie haben Recht, ich werde das versuchen. – Orionlk

Antwort

1

Wie @Il Vic empfiehlt, diese Validierungslogik in der View-Modellklasse zu implementieren.

Sie ändern die ValidatesOnDataErrors Eigenschaft der Bindung in der Ansicht nicht. Stattdessen sollten Sie sicherstellen, dass Ihr Ansichtsmodell immer in einem gültigen Zustand ist und keine Fehler für die datengebundene Value-Eigenschaft zurückgibt, wenn die isValueFieldEnable-Eigenschaft false zurückgibt.

Die Bindung in der Ansicht ist immer gleich. Es ist Ihr Ansichtsmodell, das definieren soll, ob die Value-Eigenschaft auf einen gültigen Wert festgelegt ist. Und die Eigenschaft sollte immer als gültig betrachtet werden, wenn isValueFieldEnable falsch ist. Das ist Ihre Validierungslogik. Und dies sollte in Ihrer Sichtmodellklasse implementiert werden, nicht in Ihrer Sicht.

Verwandte Themen