我有一个包含5个复选框项目的列表:
<ListBox x:Name="Listbox" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top">
<CheckBox x:Name="Item1" Content="Item1" Checked="Item1_Checked"/>
<CheckBox x:Name="Item2" Content="Item2" Checked="Item2_Checked"/>
<CheckBox x:Name="Item3" Content="Item3" Checked="Item3_Checked"/>
<CheckBox x:Name="Item4" Content="Item4" Checked="Item4_Checked"/>
<CheckBox x:Name="Item5" Content="Item5" Checked="Item5_Checked"/>
</ListBox>
对于每个选中的复选框,我希望将项目添加到名为myList的列表中。
所以我尝试了这个:
public MainWindow()
{
InitializeComponent();
}
List<string> myList;
private void Item1_Checked(object sender, RoutedEventArgs e)
{
myList.Add(Item1);
}
问题是,“Item1”不是一个对象,因此无法添加到对象列表中。
我的列表中有一些对象后,我想按特定顺序对它们进行排序,例如按名称排序,然后在预先制作的模板中显示列表。
有什么建议吗?
希望你理解我,我的英语不完美,我是c#和wpf的新手:P
答案 0 :(得分:3)
您需要使用传递给已检查处理程序的Source
参数的RoutedEventsArgs
属性。此外,您可以对所有复选框使用相同的事件处理程序:
<ListBox x:Name="Listbox" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top">
<CheckBox x:Name="Item1" Content="Item1" Checked="Item_Checked"/>
<CheckBox x:Name="Item2" Content="Item2" Checked="Item_Checked"/>
<CheckBox x:Name="Item3" Content="Item3" Checked="Item_Checked"/>
<CheckBox x:Name="Item4" Content="Item4" Checked="Item_Checked"/>
<CheckBox x:Name="Item5" Content="Item5" Checked="Item_Checked"/>
</ListBox>
private void Item_Checked(object sender, RoutedEventArgs e)
{
myList.Add((e.Source as CheckBox).Name);
}
可以在RoutedEventArgs.Source
中找到启动该事件的控件。当然,您需要将其转换为控件类型。
在您的特定情况下,您也可以使用sender
,但依靠Source
属性通常会更安全。