2016-07-27 34 views
0

我已經提出了一個由datePickercomboBox組成的應用程序。 comboBox有一個範圍從0到5的數字列表。當用戶使用comboBox選擇「1」時,我的datePickerdpkClaim1」將被啓用,但我的datePickers的其餘部分將被禁用。如果用戶選擇2 dpkClaim1dpkClaim2將被啓用,如果用戶選擇3 dpkClaim1dpkClaim2dpkClaim3將被啓用等等。我想知道是否可以使用開關而不是一系列if語句來提供更清晰的代碼。如何使開關語句wpf

我的代碼休耕

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

回答

1

在你想要做這樣的事情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; 
} 
1

當然可以。然而,你可能想重新考慮你在項目中做事情的方式(參考H.B.的答案)。

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

會不會在所有情況下的具體工作,而是創建的基礎上,選擇的號碼機型列表,然後與含有ComboBoxItemTemplate綁定一個ItemsControl。這將產生n輸入,而不需要禁用任何東西。

3

這可以簡化很多:

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; 

雖然你還是應該真的使用data bindingdata templating