WPF列表视图绑定-在后面的代码中获得绑定项

本文关键字:绑定 代码 在后面 列表 视图 WPF | 更新日期: 2023-09-27 18:09:17

我试图从代码背后访问UserControl的绑定对象(从listView itemsource生成)。

我有以下代码:

<ListView x:Name="lst1">
    <ListView.ItemTemplate>
       <Controls:MyUserControl />  
    </ListView.ItemTemplate>
<ListView>

public void Load()
{
    lst1.ItemsSource = List<Customer> from database ......
}

在生成的每个用户控件中,我想访问用户控件从中获取值的Customer对象,即:

public MyUserControl()
{
    InitializeComponent();
    Customer cust = (Customer)this.DataContext;
    // cust is null????
}

这段代码成功地显示了Customer对象的属性,我只是在后面的代码中似乎找不到它。

请帮。

WPF列表视图绑定-在后面的代码中获得绑定项

编译器真的允许您在没有强制转换的情况下将object赋值给Customer吗?

无论如何,DataContext还没有在构造函数中初始化。

您可以处理DataContextChanged事件,该事件将在DataContext更改时引发—在本例中,可能只是在实例化创建MyUserControlDataTemplate的过程中分配它。这正是你想要的。

XAML

<UserControl
    ...
    DataContextChanged="MyUserControl_DataContextChanged"
    ...
c#

private Customer _customer;
void MyUserControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    _customer = (Customer)DataContext;
}

或者您可以在需要时将DataContext转换为Customer。当然要检查null。你没有说你在用Customer做什么,所以很难确定你什么时候需要用它做点什么。