2016-09-27 102 views
0

我想從代碼隱藏中訪問UserControl的綁定對象(由listView itemsource生成)。WPF ListView綁定 - 在代碼後面獲取綁定項

我有以下代碼:

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

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

在每個用戶控件上時gererated,我要訪問的客戶對象,用戶控件得到它是從,即值:

public MyUserControl() 
{ 
    InitializeComponent(); 

    Customer cust = (Customer)this.DataContext; 
    // cust is null???? 
} 

此代碼成功顯示來自Customer對象的屬性,我似乎無法在代碼b中找到它ehind。

請幫忙。

回答

2

編譯器是否真的允許您在沒有轉換的情況下將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; 
} 

或者你可以只投DataContextCustomer當你需要使用它。當然,請檢查null。你沒有說你在做什麼Customer,所以很難確定你何時需要做些什麼。

+0

感謝您發現 - 我更新了演員的提問。 – Noobie3001

+0

感謝您的簡短和甜蜜的回答。我不知道DataContext在構建之後才能使用。直到後來的保存發生時,我纔打算使用它。很多再次感謝。 – Noobie3001

+1

@ Noobie3001如果你仔細想想,在構造函數完成之前,任何人都不能分配任何東西(或任何類實例的任何屬性) - 除了新的類實例本身,它只能通過一個DataContext獲得一個值參數給構造函數。但是那個構造函數沒有參數。 –