将ItemSource绑定到列表框

时间:2013-06-02 12:54:04

标签: c# xaml

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

我有一个ListBox:

<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#中的列表框中,当它更改时,我清除列表框并再次添加列表,这是不希望的。

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

3 个答案:

答案 0 :(得分:0)

使用ObservableCollection代替泛型List<T>,在内部实现负责更新UI上元素的INotifyCollectionChanged接口。

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}">

答案 1 :(得分:0)

您必须将List更改为ObservableCollection并根据MVVM模式实现所有内容。

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

您必须为Items中的每个属性执行相同的操作。也可以使用Prism进行绑定。你可以在网上找到很多很好的教程,如this

答案 2 :(得分:0)

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

还必须使用NotifyOnSourceUpdated = True。