Combobox SelectedValue.ToString始终为null WPF

时间:2016-06-13 11:45:52

标签: c# wpf datetime combobox

我有DateTime属性,我希望保存日期和时间。因此,我在DatePicker中设置WPF,我可以在其中选择日期。在它旁边我放了Combobox一些时间条目。

1

现在,我想加入我在combobox中使用DateTime的{​​{1}}加入的时间,以便将DatePicker的默认值替换为我的值我在00:00:00中选择了。我怎么做?

这里有一些代码片段。我填写这样的组合框:

comboBox

StartTime和EndTime是我的ComboBoxes

我想加入我的for (int i = 0; i < 24; i++) { for (int j = 0; j < 2; j++) { string minute; if (j == 0) { minute = "00"; } else { minute = "30"; } //view.cmbStartZeit.Items.Add(i.ToString() + ":" + j.ToString()); //startZeit.Content = i.ToString() + ":" + minute; //endZeit.Content = i.ToString() + ":" + minute; StartTime.Items.Add(i.ToString("00") + ":" + minute); EndTime.Items.Add(i.ToString("00") + ":" + minute); } 和时间在组合框中。我找到了一个代码示例,但它不起作用。

DatePicker

((DateTime)view.StartDate.SelectedDate).Add(TimeSpan.FromMinutes(Convert.ToDouble((view.StartTime.SelectedValue.ToString()).Split(':')[0]))).Add(TimeSpan.FromHours(Convert.ToDouble((view.StartTime.SelectedValue.ToString()).Split(':')[1]))); 是我的StartDate。它总是在DatePicker

给我null

如果有人知道另一种方法,不使用第三方套件或类似的东西请告诉我。我必须使用原生的StartTime.SelectedValue.ToString()内容(它适用于学校)

非常感谢提前

B.Pumpkin

1 个答案:

答案 0 :(得分:1)

运行类似的示例可以正常获取StartTime.SelectedValue.ToString()

但是还有其他问题:

DateTime.Add是一个非变异方法,只返回一个新的DateTime对象。 首先,您需要将新的DateTime设置为StartDate对象。你也正在以相反的顺序解析分钟和小时(但是有更好的方法来解析它,见下文)。

以下是我的工作:

var time = TimeSpan.Parse(startTime.SelectedValue.ToString());

startDate.SelectedDate = ((DateTime)startDate.SelectedDate).Add(time);

完整(简单),工作示例:

<StackPanel>
            <DatePicker Name="startDate" />
            <ComboBox Name="startTime" SelectionChanged="StartTime_OnSelected" />
</StackPanel>

代码背后:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        for (int i = 0; i < 24; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                string minute;

                if (j == 0)
                {
                    minute = "00";
                }
                else
                {
                    minute = "30";
                }


                //view.cmbStartZeit.Items.Add(i.ToString() + ":" + j.ToString());
                //startZeit.Content = i.ToString() + ":" + minute;
                //endZeit.Content = i.ToString() + ":" + minute;

                startTime.Items.Add(i.ToString("00") + ":" + minute);
            }
        }
    }

    private void StartTime_OnSelected(object sender, RoutedEventArgs e)
    {
        var time = TimeSpan.Parse(startTime.SelectedValue.ToString());

        // startDate.SelectedDate could be null, so do some checking before
        startDate.SelectedDate = ((DateTime)startDate.SelectedDate).Add(time);
    }
}