2016-04-14 65 views
0

我想將列表視圖的SelectedItem綁定到我的TextBox..What我做的是以下幾點:MVVM ListView控件和文本框結合的SelectedItem

 private User _selectedUser; 
     public User SelectedUser 
     { 
      get { return _selectedUser; } 
      set 
      { 
       _selectedUser = value; 
       RaisePropertyChanged("SelectedUser"); 
      } 
     } 

的ListView的XAML:

<ListView HorizontalAlignment="Left" 
       Height="194" 
       Margin="37,102,0,0" 
       SelectedItem="{Binding SelectedItem}" 

文本框的XAML:

<TextBox Text="{Binding SelectedItem.FirstName}" /> 

如果我從列表視圖中選擇了一個條目,它會在文本框中顯示所選條目的名稱值。這是應該的,沒問題。

問題是:我想編輯文本框中的文本,當我按下按鈕時,它應該更新與我輸入到文本框中的名稱相關的選擇名稱。 它只應該這樣做,如果我按下按鈕,但現在它已經改變了條目名稱,當我失去焦點從文本框。

我該如何解決?我已經嘗試了所有不同的模式,但似乎沒有任何工作

回答

1

它正在做你正在告訴它做的事情。您的ListView和TextBox都綁定到完全相同的東西。所以當你改變一個時,改變立即反映出來。

如果你想達到你聽起來像什麼你想,你將需要將FirstName複製到另一個屬性(讓我們稱之爲它SelectedFirstName),允許用戶在文本框中編輯值,然後當他們用戶點擊一個按鈕,從SelectedFirstName

0

更新所選項目的FirstName屬性與價值從MSDN

的TextBox.Text酒店 引發LostFocus的默認UpdateSourceTrigger值。這意味着,如果應用程序的文本框的數據綁定TextBox.Text屬性爲 ,則在TextBox 中鍵入的文本不會更新源,直到TextBox失去焦點(對於 實例,當您從TextBox中單擊時) 。

如果你希望你的源在另一時間(不是當你TextBox失去焦點),你應該用UpdateSourceTrigger性能發揮進行更新。例如,您可以聲明<TextBox Text="{Binding SelectedItem.FirstName, UpdateSourceTrigger=Explicit}" />,然後只有在按下按鈕時才調用UpdateSource方法。詳細內容請閱讀文檔鏈接:

如果你有一個對話框或一個用戶可編輯的形式,你想,直到用戶完成編輯領域和 點擊推遲 源更新「確定」,就可以設置您 綁定明確的UpdateSourceTrigger值,如下面的例子:

<TextBox Name="itemNameTextBox" 
     Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" /> 

當您將UpdateSourceTrigger值設置爲顯式,源 值ONL y在應用程序調用UpdateSource方法時發生更改。 下面的示例演示如何調用UpdateSource爲 itemNameTextBox:

// itemNameTextBox is an instance of a TextBox 
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty); 
be.UpdateSource();