2010-12-03 28 views
1

Je suis un noob WPF et j'espère cesser d'être une journée (Lol)non-travail WPF Reliure

Quoi qu'il en soit, je vais avoir des problèmes de liaison DataTable (obtenu à partir d'un OleDBDataAdapter) à un DataGrid. Même si le DataTable n'est pas vide, je n'obtiens rien sur le DataGrid, cela ne fonctionne que si je configure manuellement la propriété ItemsSource dans code-behind. Aidez-moi? [Je veux rendre ceci automatique afin que toutes les modifications apportées à la grille soient reflétées dans le DataTable, me permettant d'utiliser simplement OleDBCommandbuilder pour mettre à jour la base de données Access elle-même (Oui, je suis paresseux :)). Je pensais à étendre DataTable à mettre en œuvre INotifyCollectionChanged mais je ne suis pas sûr que ce soit faisables: S]

XAML:

  <Grid> 
       <DataGrid Grid.Column="0" Grid.ColumnSpan="2" x:Name="ListaArticulos" 
          Padding="-5,0,0,0" AutoGenerateColumns="False" ItemsSource="{Binding Articulos}"> 
        <DataGrid.Columns> 
         <DataGridTextColumn IsReadOnly="True" Width="Auto" Header="ID" Binding="{Binding ID}"/> 
         <DataGridTextColumn Header="Nombre Articulo" Binding="{Binding Nombre}"/> 
         <DataGridTextColumn Header="Categoria" Binding="{Binding Categoria}"/> 
         <DataGridTextColumn Header="Valor" Binding="{Binding Valor}"/> 
         <DataGridTextColumn Header="Cantidad" Binding="{Binding Cantidad}" /> 
         <DataGridTextColumn Header="Color" Binding="{Binding Color}" /> 
         <DataGridTextColumn Header="Material" Binding="{Binding Material}" /> 
         <DataGridTextColumn Header="Referencia" Binding="{Binding Referencia}" Width="*"/> 
        </DataGrid.Columns> 
       </DataGrid> 
      </Grid> 

code-behind:

public DataTable _Articulos = new DataTable(); 

    public DataTable Articulos { get { return _Articulos; } } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     ListaArticulos.DataContext = this; 
     ReadDB(); 
    } 

ReadDb() met à jour le Articulos DB.

Merci d'avance.

+0

J'ai réussi à faire une classe DataTable qui implémente INotifyChanged l'ajout d'un appel à la PropertyChangedEventHandler sur chacun de ses événements liés aux lignes, encore une fois, Je n'ai rien sur la base de données initiale ... pourquoi? – Machinarius

+0

DataContext doit implémenter l'interface INotifyPropertyChanged si nécessaire, pas le ItemsSource. – Matthieu

+0

@ Alors ma fenêtre doit-elle implémenter cette interface? (Même que j'ai abandonné sur DataTable, im concevoir une classe personnalisée qui encapsulera des données de DB avec un ObservableCollection) – Machinarius

Répondre

2

votre code

InitializeComponent(); 
    ListaArticulos.DataContext = this; 
    ReadDB(); 

changement

ReadDB(); 
    InitializeComponent(); 
+0

Cela l'a fait ... en quelque sorte: p Merci :) – Machinarius