0

这个问题之前可能被问过很多次,但是我看到了很多答案,我真的不知道该怎么办。

我有一个列表框:

<listbox ItemSource="{Binding listitems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <grid>
                <Textblock text="{Binding value1}">
                <Textblock text="{Binding value2}">
            </grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</listbox>

我有以下课程的列表:

List<Items> listitems = new List<Items>();
public class Items
{
    public string value1 { get; set; }
    public string value2 { get; set; }
}

有时,列表会更新(添加了更多元素),我想让列表框知道列表已更新并相应地更新 UI。

此时我手动将列表绑定到我的 c# 中的列表框,当它更改时,我清除列表框并再次添加列表,这是不需要的。

我想知道列表框如何自动更新?

4

3 回答 3

0

List<T>使用ObservableCollection而不是 generic ,它在内部实现INotifyCollectionChanged了负责更新 UI 上的元素的接口。

ObservableCollection<Items> listitems = new ObservableCollection<Items>();

编辑

ListItems 必须是property. 您不能将其与字段绑定-

ObservableCollection<Items> listitems = new ObservableCollection<Items>();
public ObservableCollection<Items> Listitems
{
   get
   {
      return listitems;
   }
   set
   {
      listItems = value;
   }
}

XAML -

<Listbox ItemSource="{Binding Listitems}">
于 2013-06-02T13:02:42.250 回答
0

您必须根据 MVVM 模式更改并实现所有内容ListObservableCollection

public ObservableCollection<Items> Listitems 
{
    get { return _listitems ; }
    set
    {
        _listitems  = value;
        RaisePropertyChanged(() => Listitems );
    }
}

您必须对 中的每个属性执行相同的操作Items。也可以使用棱镜进行装订。你可以在网上找到很多像这样的好教程

于 2013-06-02T13:07:38.737 回答
0

如果您使用 List,那么您必须使用 INotifypropertyChanged 进行通知,否则您可以使用 ObservableCollection。

还必须使用 NotifyOnSourceUpdated=True。

于 2013-06-02T13:44:11.350 回答