2014-12-13 4 views
0

Существует список, связывающий с itemsource. Я хочу изменить данные коллекции после этого. кнопка добавления данных не изменяет список.связывание источника источника двоих в кодебе?

После этого я добавляю обновление после источника items, но он не загружает 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'? –

+0

Является ли список участников? Если это так, он не реализует INotifyCollectionChanged, и поэтому изменений не отражается. – Maximus

+0

да, lbxMember является свойством класса Member. –

ответ

1

Вы можете использовать ObservableCollection под к крышкам, но вы подвергаете его как IEnumerable

IEnuerable не занимается уведомлять UI вставок и удалений.

Почему бы просто не использовать ObservableCollection и пропустить этот MemberList?

+0

Я хотел разделить контент и контейнер, но я думаю, что это не имеет смысла. Я понимаю средства между IEnumerable с ObservableCollection. Спасибо, Блам. –

+0

Если вы поняли средства между IEnumerable с ObservableCollection, у вас не было бы этого вопроса. – Paparazzi

Смежные вопросы