Zbindowane dane nie wyswietlają się prawidłowo

0

Mam taki problem.

Chce aby po kliknieciu na przycisk, tworzyl sie obiekt pewnej klasy i zostal dodany do kontrolki Griddata.

Obiekty sie tworza, ale z dodawaniem jest pewien problm.
Jak klikne 1 raz to tworzy sie pierwszy element i jest prawidlowo dodany.
drugie klikniecie i tworzy sie element ale nie zostaje dodany.
kolejne klikniecie i tworzy sie element i zostaje dodany prawidlowo, razem z drugim elementem.

Czy moze mi ktos wyjasnic dlaczego tak sie dzieje ??

             <Grid x:Name="Base" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="220" Height="430" Visibility="Visible">
                <DataGrid x:Name="dataGrid" AutoGenerateColumns="False" FontSize="13.333" IsReadOnly="True" ItemsSource="{Binding}">
                    <DataGrid.Columns>
                        <DataGridTextColumn x:Name="id" Header="ID" Width="*"  CanUserResize="False" Binding="{Binding Path=id }"/>
                        <DataGridTextColumn x:Name="nom" Header="Imie" Width="4*" CanUserResize="False" Binding="{Binding Path=nom }"/>
                        <DataGridTextColumn x:Name="prenom" Header="Nazwisko" Width="4*" CanUserResize="False" Binding="{Binding Path=prenom }"/>
                    </DataGrid.Columns>
                </DataGrid>


            </Grid>
  public partial class MainWindow : Window
    {

        List<ArbreGen> lista; 
        public MainWindow()
        {
            InitializeComponent();
            lista = new List<ArbreGen>();
            dataGrid.DataContext = lista;

  
        }
       
        private void ProgramFin(object sender, RoutedEventArgs e)
        {
            Close();
        }
        int ids = 1;
        private void AjoutSim_Click(object sender, RoutedEventArgs e)
        {
        

                ArbreGen SIMEK = new ArbreGen(ids++, "adam"+ ids, "nowak");
               
                       
                lista.Add(SIMEK);
}
                
0
        int ids = 1;
        List<ArbreGen> lista = new List<ArbreGen>(); 
        public MainWindow()
        {
            InitializeComponent();
        }
        private void ProgramFin(object sender, RoutedEventArgs e)
        {
            Close();
        }
        
        private void AjoutSim_Click(object sender, RoutedEventArgs e)
        {
                ArbreGen SIMEK = new ArbreGen(ids++, "adam"+ ids, "nowak");
                lista.Add(SIMEK);
                dataGrid.DataContext = lista;
        }
0

jak tak dam jak podales to sie program calkiem wysypuje

1 kliknieice dodany element.
2 klikniecie nic sie nie dzieje
3 klikniecie crash :

n unhandled exception of type 'System.InvalidOperationException' occurred in PresentationFramework.dll

Additional information: Element ItemsControl jest niespójny ze źródłem elementów.

Aby uzyskać więcej informacji, przejdź do wyjątków wewnętrznych.

2

Zamiast zwykłej listy użyj ObeservableCollection<T> z przestrzeni System.Collections.ObjectModel. Bindingi na pierwszy rzut oka masz dobrze porobione więc pewnie w tym leży problem.

0

tak to bylo dokladnie to czego mi bylo potrzeba :) dziekuje serdecznie : )

0
grzesiek51114 napisał(a):

Zamiast zwykłej listy użyj ObeservableCollection<T> z przestrzeni System.Collections.ObjectModel. Bindingi na pierwszy rzut oka masz dobrze porobione więc pewnie w tym leży problem.

Miałem podobny problem i naprawiłem go zmieniając listę na ObeservableCollection.
Dlaczego to akurat zadziałało? Czym różni się od listy?

0

OC propaguje informacje o zmnianach w kolekcji, a zwykła lista tego nie robi dlatego stosując zwykłą listę kontrolki nie wiedzą nic o zmianach w kolekcji, których na przykład oczekują i program się wysypuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1