不能在定时器间隔使用整数

时间:2014-07-09 20:35:16

标签: c# wpf timer intervals timespan

我使用WPF并且计时器不允许使用int作为间隔。相反,它要求TimeSpan

timer1.Interval = TimeSpan.FromMilliseconds(Convert.ToDouble(comboBox1.SelectedItem));

所以我将我的代码更改为此,但在运行时它给我一个InvalidCastException,说该对象无法从System.Windows.Controls.ComboboxItem转换为System.IConvertible。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你应该使用这个

Convert.ToDouble(comboBox1.SelectedText)

comboBox1.SelectedItem对应于ComboBox控件的选定项目,而不是它的文本,这是您想要的。

具体来说,CombBox控件的SelectedText属性

  

获取或设置在ComboBox的可编辑部分中选择的文本。

here所述。

<强>更新

请使用这个:

((ComboBoxItem)comboBox1.SelectedItem).Content.ToString();

或分两步:

ComboBoxItem item = (ComboBoxItem)comboBox1.SelectedItem;
timer1.Interval = TimeSpan.FromMilliseconds(Convert.ToDouble(item.Content.ToString()));

有关ComboBoxItem课程的详情,请查看here

答案 1 :(得分:1)

您似乎正在将ComboBoxItem直接添加到ComboBox。

比解析字符串更简洁,更安全的方法是继续绑定到SelectedItem,但也将ItemsSource绑定到整数集合。

然后使用ComboBox的ItemTemplate属性来定义如果对默认的ToString()渲染不满意则如何渲染整数。

<ComboBox ItemsSource="{Binding Intervals}" SelectedItem="{SelectedInterval}">
    <ComboBox.ItemTemplate>
        <DataTemplate TargetType="{x:Type Int64}">
            <TextBlock Text="{Binding}" Background="Red"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
<ComboBox>

属性看起来像这样:

public int SelectedInterval {get;set;}

public List<int> Intervals {
    get {
        var lst = new List<int>();
        for(var i = 1000; i <= 10000; i += 500)
        {
            lst.Add(i);
        }
        return lst;
    }
}

现在您拥有强类型属性,无需解析即可操作。