ObservableCollection不更新列表视图

Sal*_*med 1 windows-phone-7

我有一个ObservableCollection,可以在自定义列表框中查看.我需要列表框根据应用的更改来更新视图,例如插入新的订阅源或从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; }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

我试过这里发布的解决方案实现CollectionChanged,但我仍然得到同样的错误.

如有任何帮助,请提前致谢

Col*_*inE 5

问题出在您的更新方法上:

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

ItemsSource您的ListBox设置到 ModifiedItems这是一个ObservableCollection.因此,如果您在此集合中添加或删除项目,ListBoxUI将自动更新.例如,要向视图添加新项,只需执行以下操作:

ModifiedItems.Add(new feed());
Run Code Online (Sandbox Code Playgroud)

这是一个整体观点ObservableCollection,观点可以观察到它!

如果您要更新现有项目而不是添加/删除项目,则需要制作feed工具INotifyPropertyChanged.