向转换器发送2个控制值

本文关键字:控制 2个 转换器 | 更新日期: 2023-09-27 17:59:45

我的应用程序中有两个整数上下控件。1表示从时间跨度开始的分钟,另一个表示从时间间隔开始的秒。我想将这些值绑定到时间跨度。我知道我需要使用转换器。但是,我还需要在任何更改事件中将这两个值都发送到转换器。因此,如果用户更改分钟,我需要从分钟和秒中创建一个新的时间跨度。有没有办法将这两个值都发送到转换器,或者我需要在后面的代码中这样做?

这是两个控件的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中使用几个属性。

在这些属性中的每一个的setter中,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");
  }
}