通过一系列固定按钮或自定义值将值设置为一个属性
本文关键字:属性 一个 设置 一系列 按钮 自定义 | 更新日期: 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
值的控件。