Почему мой код C# не добавляется в список и не отображается на нем?
Я пытаюсь научить себя C#, но у меня проблемы с этим кодом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
contacts.Add(new Contact()
{
Name = "James",
Email = "james@mail.com",
PhoneNumber = "01234 111111"
});
contacts.Add(new Contact()
{
Name = "Bob",
Email = "bob@mail.com",
PhoneNumber = "01234 222222"
});
contacts.Add(new Contact()
{
Name = "Emma",
Email = "emma@mail.com",
PhoneNumber = "01234 333333"
});
}
protected List<Contact> contacts = new List<Contact>();
public List<Contact> Contacts
{
get { return contacts; }
set { contacts = value; }
}
private void NewContactButton_Click(object sender, RoutedEventArgs e)
{
contacts.Add(new Contact()
{
Name = NameTextBox.Text,
Email = EmailTextBox.Text,
PhoneNumber = PhoneTextBox.Text
});
}
}
}
Он не отображает новый контакт в списке, и я не уверен, что он создает новый контакт. Он отображает первые три прекрасно.
У меня такое чувство, что я пропускаю что-то важное.
2 ответа
Решение
+ Изменить
protected List<Contact> contacts = new List<Contact>();
public List<Contact> Contacts
{
get { return contacts; }
set { contacts = value; }
}
в
protected ObservableCollection<Contact> contacts = new ObservableCollection<Contact>();
public ObservableCollection<Contact> Contacts
{
get { return contacts; }
set { contacts = value; }
}
и добавить using System.Collections.ObjectModel;
к началу кода.
и внесите необходимые изменения в остальной код.
Используйте код, как указано ниже, он будет работать:
public MainWindow()
{
InitializeComponent();
dgContacts.ItemsSource = Contacts;
}
private void btnClick_Click(object sender, RoutedEventArgs e)
{
Contacts.Add(new contact()
{
Name = "Person",
Email = "Person Address",
PhoneNumber = "Person Ph"
});
}
protected ObservableCollection<contact> contacts = new ObservableCollection<contact>();
public ObservableCollection<contact> Contacts
{
get { return contacts; }
set { contacts = value; }
}
и XAML этого кода будет:
<DataGrid Name="dgContacts" Margin="5" AutoGenerateColumns="True" ItemsSource="{Binding}"></DataGrid>
Основная часть WPF - это привязка, если вы сделаете привязку правильно, она создаст для вас магию. Если этот код работает для вас; Я покажу вам другой способ связать это.