1

私は自分自身に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
            });
        }

        }

    }

リストに新しい連絡先が表示されておらず、新しい連絡先が作成されているかどうかわかりません。最初の3つは完全に正常に表示されます。

重要なことを省いているような気がします。

4

2 に答える 2

5

変化する

   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;コードの先頭に追加します。

残りのコードに必要な変更を加えます。

于 2012-11-14T02:38:01.437 に答える
1

以下に説明するコードを使用すると、機能します。

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の主要部分はバインディングです。バインディングを適切に行うと、魔法が生まれます。このコードが機能する場合; それをバインドする別の方法を紹介します。

于 2012-11-14T08:26:39.667 に答える