2011-06-21 11 views
0

私のアプリケーションで2つの整数アップダウンコントロールがあります。 1は時間間隔からの分を表し、もう1つは時間間隔からの秒を表す。私はそれらの値をタイムスパンに結びつけたい。私はこのためにコンバータを使用する必要があることを知っています。しかし、私はまた、両方の値を任意の変更イベントでコンバータに送る必要があります。ユーザーが分を変更すると、分と秒から新しいタイムパンを作成する必要があります。これらの値を両方ともコンバータに送る方法はありますか、それともコードの中でこれを行う必要がありますか?2つのコントロール値をコンバーターに送信

ここに2つのコントロールのXAMLがあります。ここで

<extToolKit:IntegerUpDown Minimum="0" Margin="1,3,0,4" x:Name="iupApproachMin"> 
    <extToolKit:IntegerUpDown.Value> 
     <PriorityBinding FallbackValue="50"> 
      <Binding Path="VehicleEntryTaskStandards.MaxEntryTimeRequirement" Converter="{StaticResource timeSpanConvertor}"> 
      </Binding> 
     </PriorityBinding> 
    </extToolKit:IntegerUpDown.Value> 
</extToolKit:IntegerUpDown> 
<Label>min</Label> 
<extToolKit:IntegerUpDown Minimum="0" Maximum="59" Margin="1,3,0,4" FormatString="00" Value="10"></extToolKit:IntegerUpDown> 
<Label>sec</Label> 

は、私はそれが配列またはリストを受け入れることができますコンバータコード

[ValueConversion(typeof(TimeSpan),typeof(int))] 
public class TimespanConverter:IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     int minutes = ((TimeSpan)value).Minutes; 
     return minutes; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     TimeSpan resultTimeSpan = new TimeSpan(); 

     int minutes; 
     if (int.TryParse(value.ToString(), out minutes)) 
     { 
      resultTimeSpan = new TimeSpan(0, minutes, 0); 
      return resultTimeSpan; 
     } 
     return DependencyProperty.UnsetValue; 
    } 
} 

です。もしそうなら、これはどのようにxamlで行うことができますか?

助けてください!

答えて

2

ValueConverterを使用する代わりに、ViewModelで2つのプロパティを使用します。

これらの各プロパティの設定者には、適切に更新されたTimeSpanがあります。

private TimeSpan _time; 
public TimeSpan Time 
{ 
    get { return _time; } 
    set 
    { 
    _time = value; 
    RaisePropertyChanged("Time"); 
    } 
} 

private int _minutes 
public int Minutes 
{ 
    get { return _minutes; } 
    set 
    { 
    _minutes = value; 
    CalculateTimeSpan(); 
    RaisePropertyChanged("Minutes"); 
    } 
} 

private int _seconds 
public int Seconds 
{ 
    get { return _seconds; } 
    set 
    { 
    _seconds= value; 
    CalculateTimeSpan(); 
    RaisePropertyChanged("Seconds"); 
    } 
} 
+0

これは機能するはずです。私はこれを避け、純粋にデータバインドでこれを行うよりエレガントな方法を見つけることを望んでいた – joshwl2003

+0

私はViewModelをUIの拡張と見なします。また、ViewModelの読み込み速度が速くて読みやすい場合にXamlで何かをしようとすると、多大な時間を費やすことが必ずしも価値があるとは限りません。 – benPearce

関連する問題