簡體   English   中英

MVVM ListView和TextBox綁定SelectedItem

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM