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

WPF中如何绑定第二个ListBox以显示第一个ListBox选中项关联的更新数据

实现方案

你可以根据自己的需求选择以下两种实现方式,均符合WPF绑定逻辑:

方案1:纯XAML快速实现(无需修改ViewModel)

直接通过元素名绑定第一个ListBox的选中项属性,只需要新增第二个ListBox的代码即可:

<ListBox ItemsSource="{Binding SelectedItem.Updates, ElementName=lbPCs}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Title}" FontSize="12" FontWeight="Bold"/>
                <TextBlock Text="{Binding KB}" FontSize="9"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

方案2:MVVM标准实现(推荐,方便后续扩展逻辑)

这种方式将选中状态放到ViewModel中维护,符合MVVM层级分离的设计原则,后续如果需要对选中工作站做其他逻辑操作(比如修改、删除、提交更新)会更方便。

第一步:修改ViewModel,新增选中属性并实现变更通知

首先让你的ViewModel继承INotifyPropertyChanged接口,新增选中工作站属性:

using System.ComponentModel;
using System.Runtime.CompilerServices;

public class YourViewModel : INotifyPropertyChanged
{
    // 原有代码保持不变
    public ObservableCollection<WorkstationItem> WorkstationItemList { get; set; }

    // 新增属性变更通知事件
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    // 新增选中工作站属性
    private WorkstationItem _selectedWorkstation;
    public WorkstationItem SelectedWorkstation
    {
        get => _selectedWorkstation;
        set 
        { 
            _selectedWorkstation = value;
            OnPropertyChanged();
        }
    }

    // 你原有构造函数、加载数据的其他代码保持不变
}

第二步:修改原有工作站ListBox的绑定,关联选中属性

给原来的lbPCs控件新增选中项绑定:

<ListBox x:Name="lbPCs" 
         ItemsSource="{Binding WorkstationItemList}"
         SelectedItem="{Binding SelectedWorkstation, Mode=TwoWay}">
    <!-- 原有ItemTemplate内容保持不变 -->
</ListBox>

第三步:新增第二个ListBox绑定更新列表

<ListBox ItemsSource="{Binding SelectedWorkstation.Updates}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Title}" FontSize="12" FontWeight="Bold"/>
                <TextBlock Text="{Binding KB}" FontSize="9"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

可选优化建议

如果后续你需要动态修改选中工作站的Updates列表(比如新增/删除更新项后UI自动同步),建议把WorkstationItem类里的List<UpdateItem>改成ObservableCollection<UpdateItem>,该类自带集合变更通知,无需自己额外实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:09:03