如何保存数据后按钮单击绑定的列表框

本文关键字:单击 按钮 绑定 列表 数据 何保存 保存 | 更新日期: 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 .

如何保存数据后按钮单击绑定的列表框

您应该使用您的BindingUpdateSourceTrigger: 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

时更新。