[英]WPF Listview binding - Get bound item in code behind
我試圖從代碼隱藏訪問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
做什么,因此很難確定何時需要使用客戶做些什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.