2011-08-16 68 views
1

我有一个ObservableCollection在自定义列表框中查看。我需要的列表框根据施加,如插入新的饲料或从的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,我仍然得到相同的错误。

任何帮助,请预先

回答

0

感谢既然你设定ListBox的ItemsSource,你的ModifiedItems收集绑定到它。

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

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

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

5

问题是与您的更新方法:

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

的你ListBoxItemsSource被设置为ModifiedItems这是一个ObservableCollection。因此,如果您添加或删除此集合中的项目,UI将自动更新。例如,添加一个新的项目,你的观点简单地做到以下几点:

ModifiedItems.Add(new feed()); 

这是一个ObservableCollection的整点,视图可以看到它!

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