使用项模板获取列表框项的值

本文关键字:列表 获取 | 更新日期: 2023-09-27 18:11:17

我有一个具有ObervableCollection<string>类型的IpList属性的窗口,我将窗口的DataContext属性设置为窗口本身,以便我可以将XAML元素的属性绑定到窗口的属性。我的窗口中的一个XAML元素是具有ItemTemplate:

ListBox
<ListBox
    ItemsSource="{Binding IpList}"
    x:Name="lbIps">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <DockPanel>
                <Button
                    Click="lbIps_bnClose_Click"
                    Content="X"
                    DockPanel.Dock="Left" />
                <TextBlock
                    Text="{Binding}" />
            </DockPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我希望列表框项在点击"X"按钮时自行删除。我的第一次尝试是获取所选项目索引并将其从列表中删除。但是当我只点击按钮时,没有项目被选中。我的第二次尝试是按值而不是按索引删除项目,但我不知道如何获取包含被单击按钮的列表框项目的值。所以我的问题是:是否有可能获得包含单击按钮的列表框项的索引/值?如果有,我该怎么做?是否有其他方法可以删除单击"X"按钮的父列表框项?

使用项模板获取列表框项的值

private void lbIps_bnClose_Click(object sender, RoutedEventArgs e)
{
   var vm = this.DataContext as [yourViewModelName];
   var button = sender as Button;
   var item = (string)button.DataContext;
   vm.IpList.Remove(item);
}

如果您不使用MVVM:

把这个放到点击事件

string s=(string)((sender as Button).DataContext);
IpList.Remove(item);