簡體   English   中英

如何制作switch語句wpf

[英]How to make a switch statement wpf

我制作了一個由datePickercomboBox組成的應用程序。 組合comboBox有一個從 0 到 5 的數字列表。當用戶使用組合comboBox選擇“1”時,我的datePickerdpkClaim1 ”將被啟用,但我的其余datePickers將被禁用。 如果用戶選擇 2 dpkClaim1dpkClaim2將被啟用如果用戶選擇 3 dpkClaim1 dpkClaim2 dpkClaim3將被啟用等等。 我想知道是否可以使用 switch 而不是一系列 if 語句來提供更清晰的代碼。

我的代碼是休閑

xml

<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"/>

xml文件

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;
    }

在組合框的 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;

盡管您仍然應該真正使用數據綁定數據模板

當然可以。 但是,您可能想重新考慮您在項目中做事的方式(參考 HB 的回答)。

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

根本不適用於具體實例,而是根據所選數字創建模型列表,然后將ItemsControl與包含ComboBox ItemTemplate綁定到該列表。 這將產生n 個輸入,而無需禁用任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM