2014-06-16 76 views
0

我有一個ListBox綁定到ObservableCollection。每當我按下列表框項目時,我都可以在我設計的右側面板上看到信息。我這樣做,通過Binding所選項目到每個TextBox這樣的:如何保存數據後按鈕點擊綁定列表框

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

哪裏ListBoxClients是包含ObservableCollection數據我ListBox對象,並在這一特定TextBox我展示它的Name

注:該部分工作正常。如果我在列表中選擇另一個項目,它會更改。

現在來了棘手的部分: 每當我編輯TextBoxListBox項目正在同時更新。當我按下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

+1

如果我理解更新,添加UpdateSourceTrigger =顯式綁定,然後調用UpdateSource方法更新源代碼 http://msdn.microsoft.com/fr-fr/library/syste m.windows.data.binding.updatesourcetrigger(v = vs.110).aspx – mlemay

+0

是的,就是這樣。但我的BindingExpression不起作用。只是看什麼可能是錯的。 – Sonhja

回答

3

您應該使用您的BindingUpdateSourceTriggerExplicit只允許在需要時進行更新。

實例爲您::

<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

+0

也許我錯過了一些東西,因爲它不適合我...我將我的代碼複製到後面。 – Sonhja

+0

你可以檢查我的代碼嗎?我明白你的意思,但我的ObservableCollection沒有更新......任何想法? – Sonhja

+0

現在我想到了這個問題,更新的'Binding'應該是'TextBox'。顯然這是一個觸發變化而不是'ListBox'的'ItemsSource'。讓我編輯我的帖子 – Damascus

相關問題