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

WPF如何将窗口UserControl中ListView选中对象传到另一窗口的UserControl

选中对象从UC1传递到UC2的实现方案

以下是3种不同场景下的常用实现方式:

方法1:事件订阅(低耦合首选)

适合没有引入MVVM框架的常规项目,不会让控件之间产生强依赖:

  • 首先在UC1中定义选中项传递事件,绑定ListView的选中变更事件触发回调:
// UC1.xaml.cs
// 替换YourBusinessObject为你实际的业务对象类型
public event Action<YourBusinessObject> OnItemClicked;

private void TargetListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.AddedItems.Count == 0) return;
    if (e.AddedItems[0] is YourBusinessObject selectedItem)
    {
        OnItemClicked?.Invoke(selectedItem);
    }
}
  • 然后在承载UC1的第一个窗口中,订阅UC1的OnItemClicked事件,触发时创建第二个窗口并传递数据到UC2:
// 承载UC1的窗口后台代码
public MainWindow()
{
    InitializeComponent();
    // 这里的Uc1Instance是你在窗口XAML中命名的UC1实例名称
    Uc1Instance.OnItemClicked += OpenDetailWindow;
}

private void OpenDetailWindow(YourBusinessObject selectedItem)
{
    var detailWindow = new DetailWindow();
    // 提前给UC2定义数据绑定方法,将选中对象传入
    detailWindow.Uc2Instance.SetDataSource(selectedItem);
    detailWindow.Show();
}
  • 最后在UC2中实现接收数据的方法,绑定到前端控件展示完整信息:
// UC2.xaml.cs
public void SetDataSource(YourBusinessObject item)
{
    // 直接赋值给DataContext,前端用Binding绑定对应字段即可
    DataContext = item;
}

方法2:MVVM模式共享ViewModel

如果项目已经使用MVVM架构,可直接通过ViewModel传递数据:

  • 在UC1对应的ViewModel中新增SelectedItem依赖属性,双向绑定到ListView的SelectedItem属性
  • 打开详情窗口的Command执行时,将SelectedItem作为参数传递给UC2的ViewModel,UC2直接绑定ViewModel的属性展示信息即可

方法3:构造函数传参(小型项目快速实现)

对项目耦合度要求不高的场景可以用这种最简方式:

  • 给UC2新增带参数的构造函数:
// UC2.xaml.cs
public UC2(YourBusinessObject selectedItem)
{
    InitializeComponent();
    DataContext = selectedItem;
}
  • 在UC1的选中事件中直接传递参数创建UC2实例,放到第二个窗口中展示即可

注意:如果需要UC2中修改对象后同步更新UC1的列表展示,直接传递引用类型的业务对象即可自动同步,值类型对象需要额外做同步逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:06:03