2012-02-09 74 views
1

我有2个列表框的数据填充像这样:为什么Silverlight绑定不起作用?

GoogleNewsResults.Add(
      new News() 
      { 
      Content = "News Content", Title = "News Title" 
      }); 
NotifyPropertyChanged("GoogleNewsResults"); 
GoogleBlogsResults.Add(
      new Blog() 
      { 
      Content = "Blog Content", Title = "Blog Title" 
      }); 
NotifyPropertyChanged("GoogleBlogsResults"); 

但它不更新博客结果列表框。你有什么想法,为什么? 的XAML有这种类型的结合:

<sllb:ListBox x:Name="GoogleBlogsList" ItemsSource="{Binding GoogleBlogsResults, Mode=TwoWay}" /> 

回答

1

Tutorial可以帮助你

我认为你需要在XAML

DataContext="{Binding Source={StaticResource CustomerContainerObject}}" 

<ListBox ItemsSource="{Binding}"> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Name}"></TextBlock> 
    </DataTemplate> 
</ListBox.ItemTemplate>       

绑定源
var employees = new List<Employee>() 
{ 
new Employee { Name = "Scott" }, 
new Employee { Name = "Poonam"}, 
new Employee { Name = "Paul" } 
}; 
this.DataContext = employees; 

希望有帮助。

1

而不是自己实现INotifyProperityChanged接口,您可能希望使用ObservableCollection<T>代替您的列表项目。 ObservableCollection是一个集合类,实现了INotifyProperityChanged,因此您不必手动调用“NotifyPropertyChanged”来更新绑定。

确保您拥有正确的DataContext。如果您没有使用MVVM设计模式,那么您可能需要考虑这一点。

2

正如你GoogleBlogsResults属性是

List<Blog> 

将项目添加到它的绑定引擎将不会触发火灾为对象的引用并没有改变,当你调用

NotifyPropertyChanged("GoogleBlogsResults"); 

可以解决这个通过遵循由T.Ho所述的解决方案使用

ObservableCollection<Blog> 

其中自动触发绑定引擎时集合内的数据项都通过产生一个新的

List<Blog> 

对象(其合并了新的和旧的项目)和设置GoogleBlogsResults属性来将新列表修改或可替换地。

希望这会有所帮助。