2016-07-27 17 views
0

datePickercomboBoxで構成されるアプリケーションを作成しました。 comboBoxには0から5までの番号のリストがあります。ユーザーがcomboBoxを使用して「1」を選択した場合、「dpkClaim1」は有効になりますが、残りの部分は無効になります。ユーザが2を選択した場合、ユーザが3 dpkClaim1dpkClaim2dpkClaim3を選択した場合、dpkClaim1dpkClaim2の両方が有効になります。より洗練されたコードを提供するために一連のifステートメントの代わりにスイッチを使用できるかどうか疑問に思っています。switch文を作成する方法

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

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

ではなく、選択した番号に基づいてモデルのリストを作成し、それにComboBoxを含むItemTemplateItemsControlを結合し、すべての具体的な事例では動作しないでしょう。これにより、何も無効にすることなく、nの入力が得られます。あなたはこのような何かをしたいコンボボックスのonChangedイベントイベントで

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を使用してください。