通过一系列固定按钮或自定义值将值设置为一个属性

本文关键字:属性 一个 设置 一系列 按钮 自定义 | 更新日期: 2023-09-27 18:27:58

我的模型中有一个属性,它以秒为单位存储时间。在UI上,我必须通过单选按钮显示选项,单选按钮有1,5,10,15,30分钟和1小时选项,还有一个自定义值单选按钮,在组合框中有分钟和小时选项。

在选择自定义值时,文本框和组合框中的值(以分钟和小时为选项),我在模型中设置了间隔。对于其余部分,我使用转换器及其参数来设置值。如下所示:

 public class SamplingIntervalConverter : IValueConverter
    {
        static  int[] secondsArray = new int[]{60,300,600,900,1800,3600};
        object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            int dataSeconds = 0;
            int parameterSeconds = 0;
            if (int.TryParse(value.ToString(), out dataSeconds))
            {
                if(int.TryParse(parameter.ToString(),out parameterSeconds))
                {
                    if (dataSeconds == parameterSeconds)
                    {
                        return true;
                    }
                }
                else if (parameter.ToString().Equals("Custom") && !secondsArray.Contains(dataSeconds))
                {
                    return true;
                }
            }
            return false;
        }
        object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if ((bool)value)
            {
                int parameterSeconds = 0;
                if (int.TryParse(parameter.ToString(), out parameterSeconds))
                {
                    return parameterSeconds;
                }
            }
            return 0;
        }
    }

有更好的方法解决这个问题吗。我真的很感谢在这方面的帮助。

感谢:)

通过一系列固定按钮或自定义值将值设置为一个属性

如果您真的让使用所有这些按钮,那么根据是否使用视图模型,连接Click处理程序或将Command对象绑定到它们。然后,在代码隐藏或视图模型中,只需通过添加到seconds值属性来对按钮单击做出反应。

就我个人而言,我会显示一个TimeSpan对象,而不是秒整数,因为这可以使用像{0:HH:mm}这样的漂亮的StringFormat来以用户友好的方式显示持续时间。你可以这样做:

public TimeSpan Duration
{
    get { return TimeSpan.FromSeconds(LengthInSeconds); }
    set
    {
        if (TimeSpan.FromSeconds(LengthInSeconds) != value)
        {
            LengthInSeconds = (short)value.TotalSeconds;
            NotifyPropertyChanged("Duration");
        }
    }
}

或者,看看WPF目前最好的空闲时间选择器是什么?张贴用户可用于选择TimeSpan值的控件。