2013-05-11 2 views
0

Я создаю контактную информацию, в которой пользователи могут вводить туда имя, возраст и день рождения и некоторые другие вещи в текстовые поля. Когда вы нажмете ok, я хочу, чтобы данные были помещены в DataGrid.Связывание данных с текстового поля на 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() 
} 

, который должен работать мой метод ShowContacts в моем 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, чтобы показать данные.

+0

Не понимаю, когда вы сохраняете контактную информацию и как ее извлекаете? – diogod

+0

PLS объяснить, как вы извлекаете данные? –

+0

Пожалуйста, разместите свой код XAML – Venson

ответ

0

Предполагая dgContacts является контроль вид DataGrid, вы должны вызвать следующую команду, чтобы убедиться, что данные связаны

dgContacts.DataBind();

Процедура аналогична процедуре, описанной here.

Если вы отлаживали код, и это предложение не работает, отлаживайте и отправляйте данные, привязанные к элементу управления.

0

Короткий ответ: похоже, что вы не стреляете в событие PropertyChanged, когда вы меняете ItemsSource в ShowContacts.

Долгий ответ: вы действительно должны посмотреть в MVVM. Вы просто должны создать ViewModel, который поддерживает список КонтактныеДанных, и привязать к этому списку в вашем XAML (также привязка вашего контакта диалога на объект КонтактныеДанного):

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 
0

Хорошо, здесь все XA и классы использовать в программе. Я действительно надеюсь, что кто-то может помочь рассказать, что не так и почему он не будет показывать какие-либо данные в datagrid.

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(); 



     } 
    } 
}