0

我的模型中有一个属性,它以秒为单位存储时间。在 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;
        }
    }

有没有更好的方法来解决这个问题。我真的很感激这方面的一些帮助。

谢谢 :)

4

1 回答 1

1

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

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

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

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

于 2013-08-16T10:58:08.727 回答