2010-09-10 57 views
1

我有一个MainViewModel和Customers属性(作为ObservableCollection的CustomerViewModel对象的列表)。我想将该列表作为ItemsSource绑定到ListView控件。我的MainViewModel绑定到Window的DataContext属性。我使用ServiceLocator模式来创建MainViewModel实例,该实例将IDataService接口作为构造函数中的参数。我使用接口将数据服务注入到MainViewModel中,并可以为Blend中的设计器创建一些测试数据。在Expression Blend中一切正常,数据显示正确,但是当我运行代码时ItemsSource为null并且没有数据绑定。 DataContext是正确的。当我将DataContext设置为null并且再次将MainViewModel实例ItemsSource自动设置为Customers属性时。为什么在应用程序启动时不会自动绑定到Customers属性?WPF ListView.ItemsSource绑定问题

<Grid x:Name="LayoutRoot" DataContext="{Binding MainViewModel, Source={StaticResource Locator}}"> 
    <ListView Margin="12" x:Name="customerList" 
       ItemsSource="{Binding Customers}"> 
     ... 
    </ListView> 
</Grid> 

回答

2

在创建视图之前,您的Locator的MainViewModel是否存在?如果稍后填充它,并且不触发NotifyPropertyChanged事件,则该绑定将始终指向最初绑定时的空值。

+0

定位器在创建视图之前创建MainViewModel。但是我发现在创建视图后,我在异步回调上填充Customers属性。所以没有NotifyPropertyChanged事件被激发。非常感谢你! :-) – Azat 2010-09-10 11:42:48