使用一个函数清除多个ListBox中的一个

时间:2016-08-17 12:47:04

标签: c# wpf button listbox

我有三个ListBoxes和三个'清除'buttons,其中一个Listboxes。现在,我将所有'clear'buttons链接到相同的click-function。在该函数中,我使用switch来确定要清除哪个ListBox。我想知道是否有办法摆脱switch语句并用一行代码来替换它,以确定要清除哪个ListBox。我需要将每个button与相应的ListBox相关联的内容。我弄乱了Tag的{​​{1}}属性,但那里没有运气。

以下是目前的代码:

Xaml(ClearBtn1清除lb1等):

Buttons

代码背后:

<Button Name="ClearBtn1"
        Click="ClearBtn_Click"
        Content="Clear" />

<Button Name="ClearBtn2"
        Click="ClearBtn_Click"
        Content="Clear" />

<Button Name="ClearBtn3"
        Click="ClearBtn_Click"
        Content="Clear" />

<ListBox Name="lb1" />

<ListBox Name="lb2" />

<ListBox Name="lb3" />

使用private void ClearBtn_Click(object sender, RoutedEventArgs e) { Button btn = (Button)sender; string name = btn.Name; //Gets the button name which corresponds to a certain listbox switch (name) { case "ClearBtn1": { ClearListBox(lb1); return; } case "ClearBtn2": { ClearListBox(lb2); return;} case "ClearBtn3": { ClearListBox(lb3); return; } } } public void ClearListBox(ListBox listbox) { listbox.Items.Clear(); } ,我尝试的是:

Tag

这不起作用,因为我无法将<Button Name="ClearBtn1" Click="ClearBtn_Click" Content="Clear" Tag="lb1" /> private void ClearBtn_Click(object sender, Rout { Button btn = (Button)sender; string name = btn.Name; ClearListBox(btn.Tag); //doesn't work } 转换为string

3 个答案:

答案 0 :(得分:2)

尝试将元素绑定到标记,而不仅仅是字符串:

<Button Name="ClearBtn1"
    Click="ClearBtn_Click"
    Content="Clear"
    Tag="{Binding ElementName=lb1}"/>

答案 1 :(得分:1)

我修改了你的代码以获得预期的结果。

<Button Tag="{Binding ElementName=lb1}"  Name="ClearBtn1"
    Click="ClearBtn_Click"
    Content="Clear" />

<Button Tag="{Binding ElementName=lb2}"  Name="ClearBtn2"
    Click="ClearBtn_Click"
    Content="Clear" />

<Button Tag="{Binding ElementName=lb3}"  Name="ClearBtn3"
    Click="ClearBtn_Click"
    Content="Clear" />

<ListBox Name="lb1" />

<ListBox Name="lb2" />

<ListBox Name="lb3" />

并修改了ClearBtn_Click,如下所示

private void ClearBtn_Click(object sender, RoutedEventArgs e)
{
    Button btn = (Button)sender;
    var list = btn.Tag as ListBox;
    ClearListBox(list);
}

答案 2 :(得分:1)

你可以这样做。

将listBox保存在ListBox类型的List中。 喜欢

List<ListBox> listBoxes = new List<ListBox>();
listBoxes.Add(lb1);
listBoxes.Add(lb2);
listBoxes.Add(lb3);

并将索引号作为命令参数放在每个按钮

<Button Name="ClearBtn1"
        Click="ClearBtn_Click"
        Content="Clear"
        CommandParameter="0" />

<Button Name="ClearBtn2"
        Click="ClearBtn_Click"
        Content="Clear" 
        CommandParameter="1"/>

<Button Name="ClearBtn3"
        Click="ClearBtn_Click"
        Content="Clear"
        CommandParameter="2" />

然后在按钮单击功能

private void ClearBtn_Click(object sender, Rout
{
    Button btn = (Button)sender;
    int index = int.Parse(btn.CommmandParamter);

    ClearListBox(index);
}

现在,您的ClearListBox函数将接收索引作为参数而不是列表框。

public void ClearListBox(int index)
{
    listBoxes[index].Items.Clear();
}

希望能解决您的问题。