【发布时间】:2015-03-10 15:37:04
【问题描述】:
我将项目绑定到列表框,并且我已经实现了一个功能,可以在它们被选中并且用户按下 Delete 键时将其删除。目前,删除功能直接访问源。但是,除非用户先单击保存按钮,否则我不想修改源代码。
如何修改删除 ListBoxItems 以便在用户单击按钮之前不会更新我的源?
我绑定到的列表
public ObservableCollection<Process> Processes { get; set; }
删除函数
private void OnDeletePressed(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
foreach (Process item in ProcessListBox.SelectedItems.OfType<Process>().ToList())
{
SelectedRobot.Processes.Remove(item);
}
}
}
XAML
<ListBox x:Name="ProcessListBox" ItemsSource="{Binding Processes, UpdateSourceTrigger=Explicit}" KeyDown="OnDeletePressed">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding ProcessName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
【问题讨论】:
-
也许您在 Process 对象上有一个名为 IsDeleted 的属性,并在用户单击删除按钮时将其设置为 true,然后在用户单击保存时从列表中删除该项目?
-
在@Krishna 的评论的基础上,您可以向项目模板添加一个数据触发器(基于将
IsDeleted属性设置为true)将项目的可见性设置为@987654326 @ 并将父 ListBoxItem 的Focusable属性设置为false。这样,该项目将从视图中“消失”,但仍会在源列表中。 -
@StevenRands 另一种方法是绑定到 ICollectionView 并在 IsDeleted 上有一个过滤器。这样,该项目将从 UI 集合中消失,但仍将存在于源集合中:)
标签: c# wpf data-binding updatesourcetrigger