2014-12-13 56 views
0

有一個listbox與itemsource綁定。 我想在此之後更改集合的數據。 添加數據的點擊按鈕不會改變列表框。在代碼隱藏中的兩種方式綁定itemsource?

然後我添加itemsource後的更新,但它使PresentatonFramework.pdb不加載,InvalidOperationException未處理。 我有點理解,這是一種方式綁定。 你能給我一些幫助嗎?

private MemberList members = new MemberList(); 

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    members.Add(new Member("superman", "123-1234567", "address1")); 
    members.Add(new Member("batman", "111-111111", "address2")); 
    members.Add(new Member("goodman", "222-222222", "address3")); 
    members.Add(new Member("badman", "333-333333", "address4"));    

    lbxMbrList.ItemsSource = members; 
    lbxMbrList.DisplayMemberPath = "lbxMember"; 

    //members.Add(new Member("puzzedman", "000-0000000", "address0")); //<<it makes a strange error message. 
    } 

    //I want a button to update the listbox's content 
    private void Add_Click(object sender, RoutedEventArgs e) 
    { 
     members.Add(new Member("puzzedman", "444-4444444", "address5")); 
    } 

    private void Clear_Click(object sender, RoutedEventArgs e) 
    { 
     members.Clear(); 
    } 


update: 

class MemberList : IEnumerable<Member> 
{ 
    private ObservableCollection<Member> memberList = new ObservableCollection<Member>(); 

    public Member this[int i] 
    { 
     get {return memberList[i];} 
     set {memberList[i] = value;} 
    } 

    public void Add(Member member) 
    { 
     memberList.Add(member); 
    } 

    public void Remove(Member member) 
    { 
     memberList.Remove(member); 
    } 

    public IEnumerator<Member> GetEnumerator() 
    { 
     return memberList.GetEnumerator(); 
    } 

    IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } 

    public void Clear() 
    { 
     memberList.Clear(); 
    } 
} 

public class Member 
{ 
    private string _name; 
    private string _phone; 
    private string _address; 

    public string Name { get { return _name; } set { _name = value; } } 
    public string Phone { get { return _phone; } set { _phone = value; } } 
    public string Address { get { return _address; } set { _address = value; } } 

    public Member() { } 

    public Member(string name, string phone, string address) 
    { 
     _name = name; _phone = phone; _address = address; 
    } 

    public string lbxMember 
    { 
     get { return string.Format("{0} {1}", Name, Phone); } 
    } 
} 
+0

'lbxMember'屬於'Member'類的屬性嗎? – 2014-12-13 15:19:39

+0

是否是成員列表?如果是這樣,它不會實現INotifyCollectionChanged,因此不反映更改。 – Maximus 2014-12-13 15:22:06

+0

是的,lbxMember是Member類的一個屬性。 – 2014-12-13 15:22:13

回答

1

您使用的ObservableCollection下蓋,但將其公開爲IEnumerable

IEnuerable不處理通知插入的UI和刪除。

爲什麼不直接使用ObservableCollection並跳過這個MemberList?

+0

我想分割內容和容器,但我認爲這是不合理的。我理解IEnumerable與ObservableCollection之間的方法。謝謝Blam。 – 2014-12-13 16:15:37

+0

如果你理解IEnumerable與ObservableCollection之間的方法,你不會有這個問題。 – Paparazzi 2014-12-13 18:59:03