如何在按钮单击绑定ListBox后保存数据

时间:2014-06-16 11:23:51

标签: c# wpf xaml

我有ListBox绑定到ObservableCollection。每当我按下ListBox项目时,我都能看到我设计的右侧面板上的信息。我按Binding选中的项目对每个TextBox执行了此操作:

<TextBox Name="TextBoxEditName" Text="{Binding ElementName=ListBoxClients, Path=SelectedItem.Name}" />

其中ListBoxClients是包含ListBox数据的ObservableCollection对象,而在此特定TextBox我显示其Name

注意:该部分工作正常。如果我在列表中选择另一个项目,则会更改。

现在是棘手的部分: 每当我编辑TextBox时,ListBox项目都会同时更新。当我按下ListBox时,我想要更改Save button项目,而不是之前。

我尝试了所有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

1 个答案:

答案 0 :(得分:3)

您应该使用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只会在您明确调用{{1}}

时更新