2017-01-29 26 views
2

ユーザーに期間を入力させたいと考えています。 可能であれば、入力を秒単位の値を表す整数プロパティにバインドします。入力は次のように書かなければなりません: "HH:mm:ss"。WPF:入力時間(hh:mm:ss)

private int _duration; 

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

そして、私のXAML:

私は、この私のViewModelのコード持って

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

をしかし、これは動作しません。私は任意のタイプの文字列(数字だけでなく)を入力することができ、フォーマットは尊重されません。

PS:私のプロジェクトはXamarinフォームプロジェクトですが、私は同じことだと思います。

+0

代わりに 'DateTime'のはなぜ整数?また、コンバータを使用することを考えましたか? – Blacktempel

+0

このエントリの私のデータベース形式は整数です。しかし、私は 'DateTime'を使用してそれを保存する前に' int'に変換することができますが、それは問題ではありません。ちなみに、 'DateTime'に変更しても、入力フォーマットに関しては何も変わりません。私はコンバータを作成しようとすると私はフィードバックを与えるために戻ってくるだろう。 – Ben

+0

'DateTime' +コンバータです。また、整数値をUIの対応する形式に変換することもできます。どちらも適切なコンバータで可能です。 – Blacktempel

答えて

1

(Howto:TimeSpan.FormSecond(second))の代わりにTimeSpanを使用してください。

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

「入力文字列が正しい形式ではありませんでした」というエラーが表示されます。あなたの例では、ReadonlyコンポーネントであるLabelを使用します。私が望むのは、ユーザーが期間を入力できるようにする書き込み可能なコンポーネントです。 – Ben

+0

形式が間違っています。申し訳ありませんが、私の悪い。正しいフォーマット: 'Text =" {バインディング時間、StringFormat = '{0:hh \\:mm \\:ss}'} "' – Kowalski

+0

ありがとうございました。しかし、この形式でも、任意の文字を入力することができます。 – Ben

関連する問題