如何制作切换语句wpf

本文关键字:语句 wpf 何制作 | 更新日期: 2023-09-27 17:59:05

我制作了一个由datePickercomboBox组成的应用程序。comboBox有一个从0到5的数字列表。当用户使用comboBox选择"1"时,我的datePicker"dpkClaim1"将被启用,但我的其余datePickers将被禁用。如果用户选择2,dpkClaim1dpkClaim2都将被启用,如果用户选择3,dpkClaim1 dpkClaim2 dpkClaim3将被启用等等。我想知道我是否可以使用开关而不是一系列If语句来提供更干净的代码。

我的代码和一样

xaml

<ComboBox x:Name="cbxNoClaims" SelectionChanged="cbxNoClaims_SelectionChanged" Loaded="cbxNoClaims_Loaded" Grid.Row="13" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Top" Width="120"/>
<DatePicker Name="dpkClaim1"  Grid.Row="13" Grid.Column="2"  HorizontalAlignment="Center" VerticalAlignment="Top"/>
<DatePicker Name="dpkClaim2"  Grid.Row="14" Grid.Column="2"  HorizontalAlignment="Center" VerticalAlignment="Top"/>
<DatePicker Name="dpkClaim3"  Grid.Row="15" Grid.Column="2"  HorizontalAlignment="Center" VerticalAlignment="Top"/>
<DatePicker Name="dpkClaim4"  Grid.Row="16" Grid.Column="2"  HorizontalAlignment="Center" VerticalAlignment="Top"/>

xaml.cs

private void cbxNoClaims_Loaded(object sender, RoutedEventArgs e)
{
    // ... A List.
    List<string> claim = new List<string>();
    claim.Add("0 ");
    claim.Add("1");
    claim.Add("2");
    claim.Add("3");
    claim.Add("4");
    claim.Add("5");

    // ... Get the ComboBox reference.
    var comboBox = sender as ComboBox;
    // ... Assign the ItemsSource to the List.
    comboBox.ItemsSource = claim;
    comboBox.SelectedIndex = 0;
}
private void cbxNoClaims_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (cbxNoClaims.SelectedItem.ToString() == "1")
    {
        dpkClaim1.IsEnabled = true;
    }
    else
    {
        dpkClaim1.IsEnabled = false;
        dpkClaim2.IsEnabled = false;
    }
    if (cbxNoClaims.SelectedItem.ToString() == "2")
    {
        dpkClaim1.IsEnabled = true;
        dpkClaim2.IsEnabled = true;
    }
    else
    {
        dpkClaim2.IsEnabled = false;
    }
    if (cbxNoClaims.SelectedItem.ToString() == "3")
    {
        dpkClaim1.IsEnabled = true;
        dpkClaim2.IsEnabled = true;
        dpkClaim3.IsEnabled = true;
    }
    else
    {
        dpkClaim3.IsEnabled = false;
    }
    if (cbxNoClaims.SelectedItem.ToString() == "4")
    {
        dpkClaim1.IsEnabled = true;
        dpkClaim2.IsEnabled = true;
        dpkClaim3.IsEnabled = true;
        dpkClaim4.IsEnabled = true;
    }
    else
    {
        dpkClaim4.IsEnabled = false;
    }

如何制作切换语句wpf

在combobox的onchanged事件中,您希望执行以下操作:

switch (combobox.SelectedItem) {
    case "1":
        datebox1.IsEnabled = true;
        break;
    case "2":
        datebox1.IsEnabled = true;
        datebox2.IsEnabled = true;
        break;
    default:
        //what you want when nothing is selected
        break;
}

这可以简化很多:

cbxNoClaims.ItemsSource = Enumerable.Range(1, 6);
var count = (int)cbxNoClaims.SelectedItem;
dpkClaim1.IsEnabled = count >= 1;
dpkClaim2.IsEnabled = count >= 2;
dpkClaim3.IsEnabled = count >= 3;
dpkClaim4.IsEnabled = count >= 4;
dpkClaim5.IsEnabled = count >= 5;
dpkClaim6.IsEnabled = count >= 6;

尽管您仍然应该真正使用数据绑定和数据模板。

当然可以。然而,你可能需要重新思考你在项目中做事的方式(参考H.B.的答案)。

switch(cbxNoClaims.SelectedItem) {
    case "1":
        // code here
        break;
    case "2":
        // also here
        break;
    // etc...
}

根本不处理具体实例,而是根据所选数字创建一个模型列表,然后将ItemsControl与包含ComboBoxItemTemplate绑定。这将产生n输入,而无需禁用任何内容。