Я создаю DataGrid
<DataGrid x:Name="WordsDataGrid" Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="X" Width="10" Binding="{Binding Status}">
<DataGridCheckBoxColumn.CellStyle>
<Style>
<EventSetter Event="CheckBox.Checked" Handler="OnChecked"/>
</Style>
</DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>
</DataGrid.Columns>
</DataGrid>
И в C# добавляем столбцы и ItemSource
private void AddItemToWordsGrid()
{
var a = typeof(Words).GetProperties();
WordsDataGrid.Columns.Add(new DataGridTextColumn() { Header = "Mnemonik", Binding = new Binding("Mnemoniese"), Width = new DataGridLength(1, DataGridLengthUnitType.Star) });
foreach (var item in a)
{
if (item.Name.ToLower().Contains("word"))
{
WordsDataGrid.Columns.Add(new DataGridTextColumn() { Header = item.Name.Substring(4, item.Name.Length-4),Binding= new Binding(item.Name), Width = new DataGridLength(1, DataGridLengthUnitType.Star) });
}
}
var list = new List<WordWithStatus>();
foreach (var item in repository.ReturnWords())
{
list.Add(new WordWithStatus(){ Id=item.Id, Mnemoniese = item.Mnemoniese, wordPl = item.wordPl, wordEng = item.wordEng, wordRus = item.wordRus});
}
WordsDataGrid.ItemsSource = list;
}
И у меня есть событие:
private void OnChecked(object sender, RoutedEventArgs e)
{
if (SelectedWords == null)
SelectedWords = new List<Words>();
foreach (var item in WordsDataGrid.Items)
{
var s = item as WordWithStatus;
if (s == null)
return;
if (s.Status)
if (SelectedWords.FirstOrDefault(x => x.Mnemoniese == s.Mnemoniese) == null)
SelectedWords.Add(new Words() {Id=s.Id, Mnemoniese = s.Mnemoniese, wordPl = s.wordPl, wordEng = s.wordEng, wordRus = s.wordRus, });
}
ProjectDataGrid.ItemsSource = null;
ProjectDataGrid.ItemsSource = SelectedWords;
}
class WordWithStatus
{
public bool Status { get; set; } = false;
public int Id { get; set; }
public string Mnemoniese { get; set; }
public string wordPl { get; set; }
public string wordEng { get; set; }
public string wordRus { get; set; }
}
Текущий код не работает, как ожидалось. И дело в том, что, установив флажок в сетке данных, он хочет переписать этот объект во второй флажок. В этом решении недостаточно переписать объект, который почти идентичен, но с переменной bool. Я должен проверять весь список каждый раз. Кроме того, когда флажок установлен, он имеет значение true, когда следующий выбран в методе OnChecked (), поэтому он работает с «задержкой».
Мне кажется, что должно быть проще решение, позволяющее мне проверить индекс или загрузить объект с установленным флажком.