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.
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ę.
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 :)