column Binding DataGrid e ObservableCollection in C#



datagrid wpf example c# (1)

Tutto quello che devi è impostare AutoGenerateColumns="False" e creare qualcosa come MyViewModel che fungerà da tuo datacontext

prova il seguente codice:

 public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MyViewModel();  
        }
    }
    public class MyViewModel

    {
          public MyViewModel()
          {
              for (int i = 0; i < 1; i++)
              {
                  _obsCollection.Add(new Tuple<string, string, string>("Test" + i, "Test2" + i, "Test3" + i));   
              }
          }
        ObservableCollection<Tuple<string, string, string>> _obsCollection = new ObservableCollection<Tuple<string, string, string>>();

        public ObservableCollection<Tuple<string, string, string>> MyObsCollection
        {
            get { return _obsCollection; }

        }
    }

Sto avendo una funzione che ottiene alcune 3 liste con stringhe all'interno. Ho usato ObservableCollection per mantenere quelle 3 liste al suo interno.

Questa è una definizione di ObservableCollection:

public partial class CreateAreaDialogWindow : System.Windows.Window
    {
        ObservableCollection<Tuple<string, string, string>> _obsCollection = new ObservableCollection<Tuple<string, string, string>>();

    }

Dopo aver aggiunto gli elenchi con il metodo che ho creato, sto scrivendo i risultati in alcuni DataGrid. La definizione di DataGrid è così:

<DataGrid Grid.Column="0" AutoGenerateColumns="True" Height="206" HorizontalAlignment="Left" Margin="12,265,0,0" Name="tabela" VerticalAlignment="Top" Width="556" SelectionChanged="tabela_SelectionChanged" Grid.RowSpan="2" ItemsSource="Binding _obsCollection">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Type" Binding="{Binding Item1}"/>
                <DataGridTextColumn Header="MapTo" Binding="{Binding Item2}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Item3}"/>
                <DataGridCheckBoxColumn Header="Controller"/>
                <DataGridCheckBoxColumn Header="Service"/>
                <DataGridCheckBoxColumn Header="Injection"/>
            </DataGrid.Columns>
        </DataGrid>

Accanto a 3 elenchi di stringhe in 3 colonne diverse ho 3 colonne in più con checkbox. Qual è il problema è che non so come fare un legame in modo corretto. Per esempio se inserisco questa riga nel mio codice:

tabela.ItemsSource = _obsCollection;

Ottengo 6 colonne invece di 3, ovviamente hanno lo stesso contenuto: 3 di quelle che ottengo dal codice XAML (e vincolante in questo caso funziona) e 3 sono da quella riga: tabela.ItemsSource = _obsCollection;

Quando elimino: tabela.ItemsSource = _obsCollection; Prendo un tavolo vuoto con le checkbox. Quindi so che il problema è nel brutto binding, ma qualcuno ha un'idea su come modificare questo codice in modo da poterlo rimuovere: tabela.ItemsSource = _obsCollection; e ottieni ancora 3 colonne con il contenuto degli elenchi e le intestazioni delle colonne: Tipo, Mappa e Nome?





datagrid