2016-05-11 21 views
0

Ich bin neu in WPF und ich habe ein einfaches Login-Fenster in MVVM mit Login-Name/Passwort mit einer Schaltfläche implementiert. mein viewmodel implementiert die Schnittstelle idataerrorinfo, um Textboxen zu validieren. Meine Absicht ist, leere Textfelder beim Laden und bei Klick-Textfeldern zu haben, um validiert zu werden, um Fehler anzuzeigen (wie das Namensfeld ist leer), nur auf Knopfanmeldung. Ich habe die Bindung alsWPF Validierung auf Textfeld nur auf Buttonclick nicht auf Windowload

<TextBox x:Name="txtName" Text="{Binding Path=Name,UpdateSourceTrigger=LostFocus,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=False}"/> 
verwendet

mit Stil für Tooltip Fehler

<Style TargetType="TextBox"> 
<Style.Triggers> 
<Trigger Property="Validation.HasError" Value="true"> 
<Setter Property="ToolTip" 
     Value="{Binding RelativeSource=      {x:StaticRelativeSource.Self}, 
       UpdateSourceTrigger=PropertyChanged, 
       Path=(Validation.Errors)[0].ErrorContent}"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

und implementiert diese Eigenschaft von IDataErrorInfo mit Validierungen in Ansichtsmodell wie unten

public string this[string columnName] 
{ 
    get 
    { 
    return Validate(columnName); 
    } 
} 

i Datacontext bin Bindung an Ansichtsmodell Klassenobjekt. Es funktioniert wie erwartet, außer Fehler wird in der Textbox auf windowload angezeigt. Ich will es nur bei Fensterladen. Bitte helfen Sie, wenn ich etwas verpasst habe. Vielen Dank.

+0

feste Formatierung – winhowes

Antwort

0

Sie müssen Mode = TwoWay festlegen und auch den UpdateSourceTrigger = PropertyChanged ändern. Versuchen Sie den folgenden Code.

<TextBox x:Name="txtName" Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, ValidatesOnNotifyDataErrors=False}" /> 

Auch müssen Sie die INotifyPropertyChanged-Schnittstelle implementieren und lösen das Ereignis auf der String-Eigenschaft in Viewmodel Property.

Verwandte Themen