【问题标题】:ObservableCollection not updating the listviewObservableCollection 不更新列表视图
【发布时间】:2011-10-28 02:09:42
【问题描述】:

我有一个可在自定义列表框中查看的 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; }
}

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 此处发布的解决方案,但仍然出现同样的错误。

任何帮助,请提前致谢

【问题讨论】:

    标签: windows-phone-7


    【解决方案1】:

    问题在于您的更新方法:

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

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

    ModifiedItems.Add(new feed());
    

    这是ObservableCollection的全部要点,视图可以观察到!

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

    【讨论】:

      【解决方案2】:

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

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

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

      为什么要复制最后一项,我无法理解。但这就是你需要做的改变。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 2021-04-19
        • 2010-11-24
        • 2018-09-23
        • 1970-01-01
        • 2017-05-21
        • 1970-01-01
        相关资源
        最近更新 更多