我制作了一个由datePicker
和comboBox
组成的应用程序。 comboBox
有一个从0到5的数字列表。当用户选择" 1"使用comboBox
我的datePicker
" dpkClaim1
"将启用,但我的datePickers
的其余部分将被停用。如果用户选择2,则如果用户选择3 dpkClaim1
,则dpkClaim2
和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;
}
答案 0 :(得分: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 binding和data templating。
答案 1 :(得分:2)
在组合框的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;
}
答案 2 :(得分:1)
当然可以。但是,您可能需要重新考虑在项目中执行操作的方式(请参阅H.B。的回答)。
switch(cbxNoClaims.SelectedItem) {
case "1":
// code here
break;
case "2":
// also here
break;
// etc...
}
答案 3 :(得分:0)
根本不适用于具体实例,而是根据所选数字创建模型列表,然后将ItemsControl
与包含ItemTemplate
的{{1}}绑定到该列表。这将产生 n 输入,而无需禁用任何内容。