You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ListView选中项单向绑定至TextBox未按预期生效问题

问题原因

你当前遇到的问题根源是TextBox绑定到实体属性时,默认的UpdateSourceTrigger值为LostFocus,只要TextBox失去焦点就会自动把输入值同步到绑定源,和ListView的SelectedItem绑定模式没有关联,所以你修改SelectedItem的绑定规则无法生效。

解决方案1:使用绑定显式更新(适合简单场景)

通过手动控制绑定的更新时机,实现仅点击保存时同步到源:

  • 第一步:调整XAML中TextBox的绑定配置,将UpdateSourceTrigger设置为Explicit,该配置下只有手动调用更新方法才会修改源对象
<!-- 所有需要编辑的TextBox都按此规则配置 -->
<TextBox x:Name="NameTextBox" Text="{Binding SELECTEDENTRY.Name, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />
<TextBox x:Name="AgeTextBox" Text="{Binding SELECTEDENTRY.Age, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />
  • 第二步:给保存按钮添加点击事件,手动触发所有编辑字段的绑定源更新
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
    // 依次更新每个字段的绑定源
    NameTextBox.GetBindingExpression(TextBox.TextProperty)?.UpdateSource();
    AgeTextBox.GetBindingExpression(TextBox.TextProperty)?.UpdateSource();
    
    // 此处可添加持久化到数据库/文件的逻辑
}
  • 第三步(可选):切换ListView选中项时清空未保存的输入,将TextBox内容重置为源对象当前值
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    NameTextBox.GetBindingExpression(TextBox.TextProperty)?.UpdateTarget();
    AgeTextBox.GetBindingExpression(TextBox.TextProperty)?.UpdateTarget();
}

解决方案2:临时编辑对象缓存(适合MVVM架构场景)

如果你的项目遵循MVVM规范不想写后台UI操作代码,可以用临时缓存对象隔离编辑态和原始数据:

  • ViewModel中新增临时编辑对象,所有TextBox绑定该临时对象的属性,仅保存时回写到原始选中对象
// 原始选中对象,和ListView SelectedItem绑定
private YourEntity _selectedEntry;
public YourEntity SELECTEDENTRY
{
    get => _selectedEntry;
    set 
    {
        _selectedEntry = value;
        OnPropertyChanged();
        // 选中项变化时拷贝原始数据到临时编辑对象
        EditEntry = new YourEntity
        {
            Name = value.Name,
            Age = value.Age
            // 其他属性依次拷贝
        };
    }
}

// 临时编辑对象,所有TextBox绑定该对象的属性
private YourEntity _editEntry;
public YourEntity EditEntry
{
    get => _editEntry;
    set 
    {
        _editEntry = value;
        OnPropertyChanged();
    }
}

// 保存命令执行逻辑
private void SaveCommandExecute()
{
    if (SELECTEDENTRY == null) return;
    // 把临时编辑的内容回写到原始对象
    SELECTEDENTRY.Name = EditEntry.Name;
    SELECTEDENTRY.Age = EditEntry.Age;
    
    // 此处添加持久化逻辑
}
  • XAML绑定调整为绑定临时编辑对象:
<TextBox Text="{Binding EditEntry.Name}" />
<TextBox Text="{Binding EditEntry.Age}" />

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:06:07