Silverlight:列表框的datatemplate中的事件

时间:2009-12-24 05:40:57

标签: silverlight silverlight-3.0 datatemplate

我想要的功能是在列表框的每个项目旁边都有一个删除按钮,因此当用户点击它时,该特定项目将从列表中删除。

我正在考虑将它放在数据模板中,但是如何将偶数连接到那个?

谢谢, 肖恩麦克莱恩

2 个答案:

答案 0 :(得分:2)

以下是解决此问题的一种方法。创建一个ObservableCollection并将ItemsSource设置为等于该Collection。然后你的按钮点击处理程序可以删除该项目。

using System;
using System.Collections.ObjectModel;
using System.Windows.Controls;

namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {
        private ObservableCollection<string> _customers;

        public MainPage()
        {
            InitializeComponent();

            _customers = new ObservableCollection<string>() { "Bob", "Mark", "Steve" };
            this.DataContext = _customers;
        }

        public void remove_Click(object sender, EventArgs e)
        {
            var button = sender as Button;
            if (button == null)
                return;

            var name = button.DataContext as string;
            if (string.IsNullOrEmpty(name))
                return;

            _customers.Remove(name);
        }
    }
}

在此示例中,您的XAML将如下所示:

<Grid x:Name="LayoutRoot">
    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" >
                    <TextBlock Text="{Binding}" />
                    <Button Content="Remove" Click="remove_Click" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

答案 1 :(得分:1)

将ListBox的ItemsSource绑定到ObservableCollection。 将删除按钮放入数据模板。 按钮的Click事件处理程序可以是这样的:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var button = sender as Button;
    if (button != null)
    {
        var yourObject = button.DataContext as YourObject;
        if (yourObject != null)
        {
            YourObjectsObservableCollection.Remove(yourObject); 
        }
    }
}

因此,您可以从按钮DataContext中检索绑定到ListBoxItem的对象。