我正在尝试从列表框中删除数据绑定的项目。 以下是列表框的外观截图。
alt text http://i46.tinypic.com/xcnn0n.png
这是在列表中添加项目的代码。
public class Task
{
public string Taskname { get; set; }
public Task(string taskname)
{
this.Taskname = taskname;
}
}
public void GetTask()
{
taskList = new List<Task>
{
new Task("Task1"),
new Task("Task2"),
new Task("Task3"),
new Task("Task4")
};
lstBxTask.ItemsSource = taskList;
}
这是Xaml代码,
<ListBox x:Name="lstBxTask" Style="{StaticResource ListBoxItems}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Taskname}" Style="{StaticResource TextInListBox}"/>
<Button Name="btnDelete" Style="{StaticResource DeleteButton}" Click="btnDelete_Click">
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
每当选择列表框中的项目时,都会显示删除(x)按钮。单击时,它应该从列表框中删除该项目。谁能告诉我怎么能这样做?
答案 0 :(得分:11)
好的,这就是我所做的。 Observablecollection就像魅力一样。
private ObservableCollection<Task> taskList;
public void GetTask()
{
taskList = new ObservableCollection<Task>
{
new Task("Task1"),
new Task("Task2"),
new Task("Task3"),
new Task("Task4")
};
lstBxTask.ItemsSource = taskList;
}
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
if (button != null)
{
var task = button.DataContext as Task;
((ObservableCollection<Task>) lstBxTask.ItemsSource).Remove(task);
}
else
{
return;
}
}
答案 1 :(得分:7)
尝试使用ObservableCollection&lt; T&gt;而不是一个简单的列表&lt; T&gt;。
ObservableCollection&lt; T&gt;每当内容发生变化时,都会通知WPF绑定系统。因此,您只需从列表中删除该项目,即可更新UI。