2016-09-27 68 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获得一个值参数给构造函数。但是那个构造函数没有参数。 –