2013-06-02 55 views
0

這個問題可能是問了很多次,但之前我已經見過這麼多的答案,我真的不知道該怎麼辦。綁定的ItemSource到列表框中

我有一個列表框:

<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#,當它改變時,我清除列表框,然後再添加名單,這是不期望。

我不知道如何自動更新列表框?

回答

0

而不是通用的List<T>,使用ObservableCollection它在內部實現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}"> 
+0

這不起作用,對不起 –

+0

您需要改用領域的財產。查看更新的答案。您無法綁定來自XAML的字段。 –

+0

Jup,你的編輯技巧:) –

0

你必須改變ListObservableCollection並根據MVVM模式實現的一切。

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

對於Items中的每個屬性,您必須執行相同的操作。還使用Prism進行綁定。你可以在網上找到許多不錯的教程,如this

+0

有趣的Mm,但有沒有其他的方式來做到這一點沒有MVVM模式?問題是我的應用程序已經快完成了,這是我最後的一步。 –

+1

修復了它!不過,我會考慮的棱鏡的事情,在我的下一個應用程序中使用它:) –

0

如果你使用的是List,那麼你必須使用INotifypropertyChanged來通知,否則你可以使用ObservableCollection。

也必須使用NotifyOnSourceUpdated = True。

+0

當我使用的ObservableCollection 時listItems =新的ObservableCollection (),用戶界面仍然沒有更新 –