ObservableCollection不更新列表视图

时间:2011-08-16 13:41:47

标签: windows-phone-7

我有一个ObservableCollection,可以在自定义列表框中查看。我需要列表框根据应用的更改来更新视图,例如插入新的Feed或从ObservableCollection中删除提要

部分代码可在

下面找到
public class lbl
{
    public ObservableCollection<feed> ModifiedItems 
        = new ObservableCollection<feed>();

    public lbl()
    {
        InitializeComponent();
        listBox1.ItemsSource = ModifiedItems ;
    }

    public void update(object sender, EventArgs e)
    {
        var x = ModifiedItems.Last();
        listBox1.Items.Add(x);
    }
}

public class feed
{
    public int ID { get; set; }
    public int source_id { get; set; }
    public string title { get; set; }
    public string source_icon { get; set; }
    public string url { get; set; }
    public string pudate { get; set; }
}

XAML

<ListBox x:Name="listBox1" >
    <ListBox.ItemTemplate >
        <DataTemplate >
            <StackPanel Width="400" Margin="20" >
                <Button x:Name="pic"  Tag="{Binding Id}">
                    <Button.Template>
                        <ControlTemplate>
                            <TextBlock Text="{Binding title}" TextWrapping="Wrap" FontFamily="Arial" FontSize="28" Tag="{Binding Id}"/>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
                <TextBlock Text="{Binding pudate}" TextWrapping="Wrap" FontSize="24"/>
                <Image Source="{Binding source_icon}" Width="100" Height="60"/>
           </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

注意:这不是代码的一部分。 在尝试添加项目“只读集合不支持操作”时,它给出了错误。

我尝试了Implementing CollectionChanged发布的解决方案,但仍然遇到同样的错误。

任何帮助,请提前致谢

2 个答案:

答案 0 :(得分:5)

问题在于您的更新方法:

 public void update(object sender, EventArgs e)
 {
     var x = ModifiedItems.Last();
     listBox1.Items.Add(x);
 }

ItemsSource的{​​{1}}设置为ListBox ModifiedItems。因此,如果您在此集合中添加或删除项目,ObservableCollection UI将自动更新。例如,要向视图中添加新项,只需执行以下操作:

ListBox

这是ModifiedItems.Add(new feed()); 的全部观点,视图可以观察到它!

如果您要更新现有项目,而不是添加/删除项目,则需要ObservableCollection实施feed

答案 1 :(得分:0)

由于您正在设置ListBox的ItemsSource,因此您将ModifiedItems集合绑定到它。

这意味着您必须修改ModifiedItems,而不是ListBox来添加/删除项目,然后相应地更新。

public void update(object sender, EventArgs e)
{
    var x = ModifiedItems.Last();
    ModifiedItems.Items.Add(x);
}

为什么你要复制最后一项是超出我的。但这是你需要做的改变。