0

ユーザーが名前、年齢、誕生日などをテキストボックスに入力できる連絡先情報プログラムを作成しています。[OK] をクリックすると、データが に入れられますDataGrid

最初に、 [新しい連絡先の作成] ボタンを押すMainWindowと呼び出される新しいウィンドウを開く があります。CreateContact

CreateContact cc = new CreateContact();
cc.ShowDialog();

新しいウィンドウが開き、名前と年齢を入力し、生年月日を選択します。次に、[OK] をクリックします。

private void cmdOk_Click(object sender, RoutedEventArgs e)
{
     MainWindow m = new MainWindow();
     m.name = txtName.Text;
     m.age = txtAge.Text;
     m.birthDate = dpBirthdate.Text;
     m.ShowContacts()
}

ShowContactsmy で私のメソッドを実行する必要がありますMainWindow:

public string name;
public string age;
public string birthDate;

public void ShowContacts()
{
    try
    {
         dgContacts.ItemsSource = LoadContactData();
    }
    catch (Exception e)
    {
         MessageBox.Show("" + e);
    }
}

private List<ContactData> LoadContactData()
{
    List<ContactData> list = new List<ContactData>();
    list.Add(new ContactData()
    {
        Name = name,
        Age = age,
        BirthDate = birthDate
    });            
    return list;
}


public class ContactData
{
    public string Name { get; set; }
    public string Age { get; set; }
    public string BirthDate { get; set; }
}

しかし、何も起こりません。 にデータがありませんDataGrid。誰かが間違っていることを教えてくれることを願っています。データが表示されない原因について、実際に多くの検索を試みましたDataGrid

4

3 に答える 3

0

さて、これが私がプログラムで使用するすべてのxamlとクラスです。何が間違っているのか、なぜデータグリッドにデータが表示されないのか、誰かが教えてくれることを本当に願っています。

MainWindow.xaml:

 <Window x:Class="KontaktInfo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <DataGrid AutoGenerateColumns="True" Name="dgContacts" HorizontalAlignment="Left" Margin="0,95,0,0" VerticalAlignment="Top" Height="225" Width="517"/>

    <Button x:Name="cmdCreateContact" Content="Opret Kontakt" HorizontalAlignment="Left" Margin="0,68,0,0" VerticalAlignment="Top" Width="80" Click="cmdCreateContact_Click"/>
    <Button x:Name="cmdDeleteContact" Content="Slet Kontakt" HorizontalAlignment="Left" Margin="85,68,0,0" VerticalAlignment="Top" Width="80"/>

</Grid>

MainWindow.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 KontaktInfo
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public string name;
        public string age;
        public string birthDate;

        public MainWindow()
        {
            InitializeComponent();   
        }

        private void cmdCreateContact_Click(object sender, RoutedEventArgs e)
        {
            CreateContact cc = new CreateContact();
            cc.ShowDialog();
        }

        public void ShowContacts()
        {
            try
            {
                dgContacts.ItemsSource = LoadContactData();
            }
            catch (Exception e)
            {
                MessageBox.Show("" + e);
            }
        }

        private List<ContactData> LoadContactData()
        {
            List<ContactData> list = new List<ContactData>();
            list.Add(new ContactData()
            {
                Name = name,
                Age = age,
                BirthDate = birthDate
            });

            return list;
        }

    }

public class ContactData
    {
        public string Name { get; set; }
        public string Age { get; set; }
        public string BirthDate { get; set; }
    }
}

CreateContact.xaml:

     <Window x:Class="KontaktInfo.CreateContact"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CreateContact" Height="403" Width="300">
    <Grid>
        <Label Content="Navn" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
        <TextBox x:Name="txtName" HorizontalAlignment="Left" Height="23" Margin="10,36,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="272"/>
        <Label Content="Alder" HorizontalAlignment="Left" Margin="10,64,0,0" VerticalAlignment="Top"/>
        <TextBox x:Name="txtAge" HorizontalAlignment="Left" Height="23" Margin="10,90,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="272"/>
        <Label Content="Fødselsdag" HorizontalAlignment="Left" Margin="10,118,0,0" VerticalAlignment="Top"/>
        <Button Name="cmdOk" Content="OK" HorizontalAlignment="Left" Margin="127,341,0,0" VerticalAlignment="Top" Width="75" Click="cmdOk_Click"/>
        <Button Name="cmdCancel" Content="Annuller" HorizontalAlignment="Left" Margin="207,341,0,0" VerticalAlignment="Top" Width="75"/>
        <DatePicker Name="dpBirthdate" HorizontalAlignment="Left" Margin="10,144,0,0" VerticalAlignment="Top"/>

    </Grid>
</Window>

CreateContact.cs:

     using System;
     using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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.Shapes;

namespace KontaktInfo
{
    /// <summary>
    /// Interaction logic for CreateContact.xaml
    /// </summary>
    public partial class CreateContact : Window
    {
        public CreateContact()
        {
            InitializeComponent();
        }

        private void cmdOk_Click(object sender, RoutedEventArgs e)
        {
            MainWindow m = new MainWindow();
            m.name = txtName.Text;
            m.age = txtAge.Text;
            m.birthDate = dpBirthdate.Text;
            m.ShowContacts();



        }
    }
}
于 2013-05-12T09:17:27.007 に答える
0

簡単な答え: ShowContacts で ItemsSource を変更したときに、 PropertyChangedイベントを発生させていないようです。

長い答え: MVVM を検討する必要があります。ContactData のリストを保持する ViewModel を作成し、XAML でそのリストにバインドする必要があります (また、Contact ダイアログを ContactData オブジェクトにデータバインドします)。

var contact = new ContactData();
var cc = new CreateContact { Datacontext = contact };
cc.ShowDialog();

// ok button has been hit at this point,
// you can check for cancel if you want
(List<ContactData>)(dgContacts.ItemsSource).Add(contact);

// may still need to fire PropertyChanged here depending on binding
于 2013-05-11T12:08:48.987 に答える