【问题标题】:MVVM ListView & TextBox binding SelectedItemMVVM ListView & TextBox 绑定 SelectedItem
【发布时间】:2016-04-14 20:32:58
【问题描述】:

我想将 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}" />

如果我从列表视图中选择了一个条目,它会在文本框中显示所选条目的名称值。应该是这样,没问题。

问题是:我想编辑文本框中的文本,当我按下按钮时,它应该使用我在文本框中输入的名称更新选定条目的名称。 只有当我按下按钮时它才应该这样做,但现在当我从文本框失去焦点时它已经更改了条目名称。

我该如何解决?我已经尝试了所有不同的模式,但似乎没有任何效果

【问题讨论】:

    标签: c# wpf xaml listview mvvm


    【解决方案1】:

    它正在做你告诉它做的事情。您的 ListView 和 TextBox 都绑定到完全相同的东西。因此,当您更改一个时,更改会立即反映出来。

    如果您想达到您想要的效果,您需要将FirstName 复制到另一个属性(我们称之为SelectedFirstName),允许用户在文本框中编辑该值然后当他们用户单击按钮时,将所选项目的FirstNameproperty 更新为SelectedFirstName中的值

    【讨论】:

      【解决方案2】:

      来自MSDN

      TextBox.Text 属性的默认 UpdateSourceTrigger 值为 失去焦点。这意味着如果应用程序有一个带有 数据绑定 TextBox.Text 属性,您在 TextBox 中键入的文本 在 TextBox 失去焦点之前不会更新源(对于 例如,当您单击离开文本框时)。

      如果您希望在其他时间更新您的源(而不是在您的 TextBox 失去焦点时),您应该使用 UpdateSourceTrigger 属性。例如,您可以声明&lt;TextBox Text="{Binding SelectedItem.FirstName, UpdateSourceTrigger=Explicit}" /&gt;,然后仅在您按下按钮时调用UpdateSource 方法。阅读文档链接了解详情:

      如果您有一个对话框或用户可编辑的表单并且您想推迟 源更新,直到用户完成编辑字段和 单击“确定”,您可以设置您的 UpdateSourceTrigger 值 绑定到 Explicit,如下例所示:

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

      当您将 UpdateSourceTrigger 值设置为 Explicit 时,源 值仅在应用程序调用 UpdateSource 方法时发生变化。 以下示例显示如何调用 UpdateSource 项目名称文本框:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 2017-07-23
        • 2019-12-05
        • 2017-08-05
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多