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对象的属性,我只是在后面的代码中似乎找不到它。
请帮。
编译器真的允许您在没有强制转换的情况下将object
赋值给Customer
吗?
无论如何,DataContext
还没有在构造函数中初始化。
您可以处理DataContextChanged
事件,该事件将在DataContext
更改时引发—在本例中,可能只是在实例化创建MyUserControl
的DataTemplate
的过程中分配它。这正是你想要的。
XAML
<UserControl
...
DataContextChanged="MyUserControl_DataContextChanged"
...
c# private Customer _customer;
void MyUserControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
_customer = (Customer)DataContext;
}
或者您可以在需要时将DataContext
转换为Customer
。当然要检查null
。你没有说你在用Customer
做什么,所以很难确定你什么时候需要用它做点什么。