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

时间:2014-07-03 21:03:14

标签: c# wpf listbox itemtemplate

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

<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”按钮的父列表框项目?

2 个答案:

答案 0 :(得分:2)

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);
}

答案 1 :(得分:0)

如果你没有使用MVVM:

将其放入点击事件

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