我有一个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发布的解决方案,但仍然遇到同样的错误。
任何帮助,请提前致谢
答案 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);
}
为什么你要复制最后一项是超出我的。但这是你需要做的改变。