2012-02-09 9 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"); 

をしかし、それはブログの結果リストボックスを更新doesntの。理由は何ですか?

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

答えて

1

このTutorialはあなたに

を助けるかもしれない、私はあなたが

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

または

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

XAMLでソースを結合する必要があると思う: XAMLバインディングのこのタイプを持っています
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デザインパターンを使用していない場合は、そのパターンを調べることをお勧めします。オブジェクト参照が変更されていないとして、あなたがこの問題を解決することができますが、

NotifyPropertyChanged("GoogleBlogsResults"); 

を呼び出すときに、あなたのGoogleBlogsResultsとして

2

は、プロパティは、火災へのバインディングエンジンをトリガしませんそれに項目を追加する

List<Blog> 

です

ObservableCollection<Blog> 

このようなT.Hoの解をコレクション内の項目が(新旧アイテムをマージ)新しい

List<Blog> 

オブジェクトを生成し、新しいリストにGoogleBlogsResultsプロパティを設定することにより変更または代替的にされたときに自動的にバインディングエンジンをトリガします。

これが役に立ちます。

関連する問題