2017-01-29 5 views
2

Ich möchte dem Benutzer erlauben, eine Dauer einzugeben. Ich möchte, wenn möglich, die Eingabe an eine ganzzahlige Eigenschaft binden, die den Wert in Sekunden darstellt. Die Eingabe sollte wie folgt formatiert sein: "HH: mm: ss".WPF: Eingabedauer (hh: mm: ss)

Ich habe diesen Code in meinem Viewmodel:

private int _duration; 

public int duration 
{ 
    get { return _duration; } 
    set 
    { 
    if (_duration == value) 
     return; 
    _duration = value; 
    RaisePropertyChanged(() => duration); 
    } 
} 

Und mein XAML:

<Textbox Text="{Binding duration, StringFormat=HH:mm:ss}"/> 

Aber das funktioniert nicht. Ich kann jede Art von String eingeben (nicht nur numerisch) und das Format wird nicht respektiert.

PS: Mein Projekt ist ein Xamarin Forms-Projekt, aber ich denke, es ist das Gleiche.

+0

Warum eine ganze Zahl statt 'DateTime'? Haben Sie darüber hinaus einen Konverter in Erwägung gezogen? – Blacktempel

+0

Mein Datenbankformat für diesen Eintrag i 'integer'. Aber ich kann 'DateTime' verwenden und vor dem Speichern in' int' konvertieren, das ist kein Problem. Der Wechsel zu 'DateTime' ändert übrigens nichts an der Eingabeformatierung. Ich werde versuchen, einen Konverter zu schreiben, und ich werde zurückkommen, um Feedback zu geben. – Ben

+0

'DateTime' + Konverter. Oder konvertieren Sie den Integer-Wert sogar in das entsprechende Format für die Benutzeroberfläche. Beides ist mit einem geeigneten Konverter möglich. – Blacktempel

Antwort

1

Verwenden Sie stattdessen TimeSpanint (Howto: TimeSpan.FormSecond(second)).

VM:

void StartTimer(TimeSpan span) 
{ 
    Duration = span; 
    // Tick for each Seconds 
    Device.StartTimer(TimeSpan.FromSeconds(1),()=> 
    { 
     Duration = Duration - TimeSpan.FromSeconds(1); 

     //return false when timer reachs 0 
     return (Duration.TotalSeconds>0); 

    }); 
} 


Public TimeSpan Duration 
{ 
    get{...} 
    set{...} 
} 

XAML:

<Label Text={Binding Duration, StringFormat='{0:HH:mm:ss}'} /> 
+0

Ich habe eine Fehlermeldung erhalten: 'Die Eingabezeichenfolge hatte kein richtiges Format. In Ihrem Beispiel verwenden Sie eine Beschriftung, bei der es sich um eine schreibgeschützte Komponente handelt. Was ich möchte, ist eine beschreibbare Komponente, die es dem Benutzer erlaubt, eine Dauer einzugeben. – Ben

+0

falsches Format. Entschuldigung, mein fehler. Rechtes Format: 'Text =" {Binding Duration, StringFormat = '{0: hh \\: mm \\: ss}'} "' – Kowalski

+0

Vielen Dank. Aber selbst mit diesem Format können Sie jedes Zeichen eingeben. – Ben

Verwandte Themen