为什么Silverlight绑定不起作用?

时间:2012-02-09 23:39:59

标签: c# silverlight data-binding

我有两个数据库填充的列表框如下:

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

但它不会更新Blog Results列表框。你知道为什么吗? XAML具有这种类型的绑定:

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

3 个答案:

答案 0 :(得分:2)

由于您的GoogleBlogsResults属性是

    List<Blog> 

向其添加项目不会触发绑定引擎,因为在调用

时对象引用未更改
    NotifyPropertyChanged("GoogleBlogsResults");

您可以通过使用

按照T.Ho描述的解决方案来解决此问题
    ObservableCollection<Blog>

在修改集合中的项目时或者通过生成新的

时自动触发绑定引擎
    List<Blog> 

object(合并新旧项目)并将GoogleBlogsResults属性设置为新列表。

希望这有帮助。

答案 1 :(得分: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;
希望有所帮助。

答案 2 :(得分:1)

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

确保您拥有正确的DataContext。如果您没有使用MVVM设计模式,您可能需要研究它。