2016-10-22 11 views
0

XAMLのラベルコンテンツを人の生年月日であるDatePickerにバインドして、年齢を取得します。例:日付ピッカー:2000.1.1ラベル:16. どうすればよいですか?WPF DatePickerをバインディングにバインドして人の年齢を取得する

編集

ラベルは、直ちに時に日付ピッカーの変更を変更する必要があります。次のようなIValueConverter実装を使用して、ラベルバインド

+0

要素バインディングを使用してラベルをコントロールにバインドし、IConvertorの実装を追加すると、日付が取得され、年齢が返されます。 – kidshaw

+0

あなたは誕生日をコンバータでバインドする必要があります。 – ChrisF

答えて

0

class BirthdateToAgeConverter : IValueConverter 
{ 
    public object Convert 
     (
     object value, 
     Type targetType, 
     object parameter, 
     string language) 
    { 
     var birthdate = ((DateTime) value).Date; 
     var age = DateTime.Today.Year - birthdate.Year; 

     if (birthdate > DateTime.Today.AddYears(-age)) 
     { 
      age--; 
     } 
     return age; 
    } 

    public object ConvertBack 
     (
     object value, 
     Type targetType, 
     object parameter, 
     string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

編集: あなたのXAMLでは、あなたが日付ピッカーに直接結合している場合には結合パスを定義する必要があります。 ViewModelのSzuletesiDatumにバインドすることもできます。

<Label Content="{Binding ElementName=dtPicker, Path=SelectedDate ,Converter={StaticResource DTKC}}" 
     HorizontalAlignment="Left" Margin="356,94,0,0" 
     VerticalAlignment="Top"/> 
<DatePicker x:Name="dtPicker" 
      SelectedDate="{Binding SzuletesiDatum}" 
      HorizontalAlignment="Left" 
      Margin="112,94,0,0" 
      VerticalAlignment="Top"/> 
+0

Thx、私はそれをコピーしましたが、まだ私はxamlに何を書き込むのか分かりません。 <ラベル内容= "{バインディング要素名= dtPicker、コンバータ= {スタティックリソースDTKC}}" Horizo​​ntalAlignment = "Left" Margin = "356,94,0,0" VerticalAlignment = "Top" /> は機能しません。 –

+0

バインディングパスを設定しません。私の編集を参照してください。 –

+0

ありがとうございます、それは動作していますが、 "Object referenceがオブジェクトのインスタンスに設定されていません\t"というエラーが表示され、xamlコードの先頭に "Window"が下線を引いています。この部分を削除すると消えるだけです:Converter = {StaticResource DTKC} –

関連する問題