[英]MVVM ListView & TextBox binding SelectedItem
我想將ListViews SelectedItem綁定到我的TextBox。我的工作如下:
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}" />
如果我從列表視圖中選擇了一個條目,它將在文本框中顯示所選條目的名稱值。 就是這樣,沒問題。
問題是:我想編輯文本框中的文本,當我按下按鈕時,它應該使用我在文本框中鍵入的名稱來更新selectedentries名稱。 僅當我按下按鈕時才應該這樣做,但是現在當我從文本框中失去焦點時,它已經更改了條目名稱。
我該如何解決? 我已經嘗試了所有不同的模式,但似乎無濟於事
它確實在執行您要執行的操作。 ListView和TextBox都綁定到完全相同的東西。 因此,當您更改一項時,更改會立即反映出來。
如果您想實現自己想要的效果,則需要將FirstName
復制到另一個屬性(將其稱為SelectedFirstName
),允許用戶在TextBox中編輯該值,然后在用戶單擊a按鈕,使用SelectedFirstName
的值更新所選項目的FirstName
屬性
從MSDN :
TextBox.Text屬性的默認UpdateSourceTrigger值為LostFocus。 這意味着,如果應用程序具有帶數據綁定TextBox.Text屬性的TextBox,則在TextBox失去焦點之前(例如,當您單擊TextBox時),您在TextBox中鍵入的文本不會更新源。
如果您希望在其他時間(而不是在TextBox
失去焦點時)更新源,則應使用UpdateSourceTrigger
屬性。 例如,您可以聲明<TextBox Text="{Binding SelectedItem.FirstName, UpdateSourceTrigger=Explicit}" />
,然后僅在按下按鈕時調用UpdateSource
方法。 閱讀文檔鏈接以獲取詳細信息:
如果您具有對話框或用戶可編輯的表單,並且希望將源更新推遲到用戶完成編輯字段並單擊“確定”之后,則可以將綁定的UpdateSourceTrigger值設置為Explicit,如以下示例所示:
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
當您將UpdateSourceTrigger值設置為Explicit時,僅當應用程序調用UpdateSource方法時,源值才會更改。 下面的示例演示如何為itemNameTextBox調用UpdateSource:
// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.