繁体   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