Niewyświetlanie danych przypisywanych do ItemsSource w DataGrid - WPF

0

Cześć,

Mam pewien problem i nie mogę sobie z nim poradzić.
Próbowałem już różnych sposobów na uzupełnienie ItemsSource w DataGrid i żaden nie przyniósł rezultatu, m.in. ObservableCollection i dodawanie z listy pojedynczych składników do DataGrid.Items. Przenosiłem między klasami metody, wywoływałem wszystko w jednej i nic :(

Wszystko działa mniej więcej tak:
Mam główne okienko i na nim kontrolki, jedna z listami zadań w DataGrid, druga z zadaniami do poszczególnych list również na DataGrid.
Listy uzupełniam od razu po logowaniu, zadania powinny się uzupełnić po wyborze w kontrolce z listami. Jednak się to nie dzieje, ale najdziwniejsze jest, że podczas śledzenia programu widać jak lista jest przypisywana do ItemsSource.
Dalej jest jeszcze dziwniej ;/ podczas dodawania nowych zadań do listy w kontrolce z zdaniami. DataGrid z zadaniami wyświetla wszystko poprawnie. Jednak przy wyborze nowej listy DataGrid z zadaniami pozostaje bez zmian, zmieni się dopiero przy dodaniu nowego elementu.

Kod się prezentuje jak poniżej:

.xaml

<Border Grid.Row="1" Grid.Column="0"  Style="{StaticResource CommonBaseBorderStyle}">
            <DataGrid Name="TasksDataGrid" 
                      Style="{StaticResource DataGridStyle}" 
                      AutoGeneratingColumn="TasksDataGrid_OnAutoGeneratingColumn" 
                      SelectionChanged="TasksDataGrid_SelectionChanged" ColumnWidth="*">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="ID" Visibility="Hidden" Binding="{Binding TaskId}"/>
                    <DataGridTemplateColumn ClipboardContentBinding="{x:Null}" Header="CheckBox" Width="35">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox Name="CheckBox_Complete"  Click="CheckBox_Complete_OnClick" Width="auto" Height="auto" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn Header="Task_name" Binding="{Binding TaskName}"/>
                    <DataGridTemplateColumn Width="30">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Name="Delete_btn"  Click="Delete_btn_OnClick" Style="{StaticResource DeleteFromDataGridButtonStyle}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>

            </DataGrid>
        </Border>

code behind

public void UpdateTasksList()
        {
            TasksDataGrid.ItemsSource = Upd.RefreshTasksList();
        }

ItemsSource jest uzupełniony jednak w dg nic nie wyświetla, dalej już tylko wychodzi z metod i wraca do okienka programu, nie robi nic więcej.
screenshot-20181027211942.png

Metoda zwracająca listę zadań znajduje się w innej klasie.

public List<Models.Task> RefreshTasksList()
        {
            var items = cldb.TASKS.Where(w => w.CheckList_ID == userDate.SelectedCheckListId && w.Date_od_completion == null).ToList();
            var refreshedTaskList = new List<Models.Task>();
            foreach(var item in items)
            {
                refreshedTaskList.Add(new Models.Task(item.Tasks_ID, item.Task_Name));
            }

            return refreshedTaskList;
        }

Metoda zwraca uzupełnioną listę.
screenshot-20181027211837.png

Wszystko wywołuje SelectionChanged z innej kontrolki w okienku głównym przy wyborze listy z zadaniami.

private void CLDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if(CLDataGrid.Items.Count > 0 && CLDataGrid.SelectedItem != null)
            {
                userDate.SelectedCheckListIndex = CLDataGrid.SelectedIndex;

                var cl = (Checklist)CLDataGrid.SelectedItem;
                userDate.SelectedCheckListId = cl.CheckListId;

                tasksView.UpdateTasksList();

            }
        }

Z góry dziękuję za pomoc :)

0

TL;DR;
Napiszę jak ja mam w jednym projekcie C# / WPF i działa.
Mam klasę:

public class DriveItemModel
{
    public string Name { get; set; }
}

potem mam listę tych moich dysków:

public static class Globals
{
    public static ObservableCollection<DriveItemModel> drives { get; set; }
}

przy wyświetlaniu okna wiążę kolekcję z kontrolką ComboBox:

cbDrives.DataContext = Globals.drives;
cbDrives.ItemsSource = Globals.drives;

No i po tym wszystkim, gdy dodam coś do kolekcji np.:

Globals.drives.Add(new DriveItemModel() { Name = "TEST1" });

To zawartość kontrolki ComboBox też się aktualizuje.


VX Blog | Asembler - Pisma zebrane | YT

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