如何保存数据后按钮单击绑定的列表框
本文关键字:单击 按钮 绑定 列表 数据 何保存 保存 | 更新日期: 2023-09-27 18:08:43
我有一个ListBox
绑定到一个ObservableCollection
。每当我按下ListBox项时,我都可以在我设计的右侧面板上看到信息。我这样做是通过Binding
将选中的项目分配到每个TextBox
:
<TextBox Name="TextBoxEditName" Text="{Binding ElementName=ListBoxClients, Path=SelectedItem.Name}" />
其中ListBoxClients
是包含ObservableCollection
数据的ListBox
对象,而在这个特定的TextBox
中,我显示的是它的Name
。
注意:这部分工作正常。如果我选择列表中的另一项,它会改变。
现在是棘手的部分:每当我编辑TextBox
时,ListBox
项同时被更新。当我按下Save button
时,我希望ListBox
项目改变,而不是之前。
我尝试了所有的Binding Modes
:
- 单行的
- OneWayToSource
- …
但是同样的效果发生了:当我的TextBox
失去焦点时,ListBox
项被改变了。所以…我怎么能触发保存事件时,我按下按钮,而不是之前?
我的代码:
private void ButtonSaveChanges_OnClick(object sender, RoutedEventArgs e)
{
DtoCustomer selectedCustomer = (DtoCustomer) ListBoxClients.SelectedItem;
if (selectedCustomer == null) return;
BindingExpression b = BindingOperations.GetBindingExpression(ListBoxClients, ListBox.ItemsSourceProperty);
b.UpdateSource();
}
它不工作…我后面的代码出了什么问题?我的ListBox
被绑定到一个ObservableCollection
.
您应该使用您的Binding
的UpdateSourceTrigger
: Explicit
允许您仅在需要时更新它。
给你的例子::
<TextBox Name="TextBoxEditName" Text="{Binding ElementName=ListBoxClients, Path=SelectedItem.Name, UpdateSourceTrigger=Explicit}" />
后面的代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
BindingExpression b = BindingOperations.GetBindingExpression(TextBoxEditName, TextBox.TextProperty);
b.UpdateSource();
}
这样,Binding
只会在显式调用UpdateSource