2012-02-09 124 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屬性來將新列表修改或可替換地。

希望這會有所幫助。

相關問題