我有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
:
但同样的效果会发生:当我的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
。
答案 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}}