Список флажков в шаблоне редактирования ячейки сетки данных

#c# #wpf

#c# #wpf

Вопрос:

Я пытаюсь установить только пару флажков в ячейке datagrid WPF, основываясь на данных базы данных.

Я создал список флажков из списка, поступающего из моей базы данных, и список появляется, когда я нахожусь в режиме редактирования ячейки. На данный момент я могу только проверить их все или ни одного.

Это код XAML из столбца, в котором я хочу отобразить флажок.

 <DataGridTemplateColumn Header="Teacher" Width="100">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding TeacherName}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{StaticResource TeacherList}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <CheckBox Content="{Binding}" IsChecked="False"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
  

В конце мне нужна DataGrid с классами и столбцом для учителя. Я хочу иметь возможность связать нескольких учителей с классом. Когда я вхожу в режим редактирования ячейки, я хочу иметь возможность отображать все имена моих учителей из моей базы данных (поэтому я их не знаю и не знаю количество) и проверять только тех, кто связан с классом из строки, в которой я нахожусь.

Чтобы связать нескольких учителей и класс, у меня в базе данных есть таблица с идентификатором учителя и идентификатором класса.

Заранее благодарю вас.

Обновить
Я кое-чего достиг с вашей помощью. Я создал класс «Учитель» с именем и логическим значением ‘IsCheck’.

В моем объекте «Класс» учитель поля составляет список. Я создаю каждый список для каждого класса и устанавливаю флажок для соответствующего учителя.

В моем XAML я установил источник флажка DataTemplate для этого списка учителей.

 <DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <ItemsControl ItemsSource="{Binding TEACHERLIST}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <CheckBox Content="{Binding NAME}" IsChecked="{Binding ISCHECK}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
  

Комментарии:

1. Привязки к свойствам C # чувствительны к регистру. Это означает, что ISCHECK и IsCheck совершенно разные. Можете ли вы определить, какое написание вы использовали в своем классе C #? Кроме того, вы не можете привязать поле, только свойство. Свойство имеет get и, возможно, set блок; поле — нет. Работает ли код в вашем последнем обновлении на вас?

Ответ №1:

Когда вы делаете

  <CheckBox Content="{Binding}" IsChecked="False"/>
  

Вы ни к чему не привязываете IsChecked.
Итак, что бы вы ни делали с этим флажком, я не буду привязан к тому, что привязано.

Вы должны сделать Teacher классом с как минимум двумя общедоступными свойствами. Имя строки и bool проверены. Присвоите Checked значение по умолчанию false. Он также должен реализовывать inotifypropertychanged.

Измените разметку на:

  <CheckBox Content="{Binding Name}" IsChecked="{Binding Checked, Mode=TwoWay"/>
  

Как только вы это сделаете, вы сможете проверять и снимать флажки с каждого из этих учителей, и он будет сохранен в Учителе (экземпляре), к которому привязан флажок.

В качестве отступления.

Этот дизайн пользовательского интерфейса кажется немного странным.

Более обычный вид дизайна будет иметь список классов. Вы выбираете один, и выбранный класс используется для управления тем, что вы видите в другом списке.

Это дало бы вам отдельный список преподавателей в другом списке.

Комментарии:

1. Другая проблема заключается в том, что он говорит: «Я хочу иметь возможность связать нескольких учителей с классом», и похоже, что он имеет в виду один класс в строке. Однако существует только один TeacherList ресурс, поэтому, как только привязка верна, если вы установите флажок миссис Крабаппл в одной строке, она будет отмечена во всех из них. Каждая строка должна иметь свой собственный TeacherList с собственным набором экземпляров Teacher.

2. Действительно, хорошая точка зрения. Вам нужен список выделенных учителей и список всех учителей и некоторая логика. Выделение нескольких учителей в класс кажется немного странным, теперь я думаю об этом. Прошло некоторое время с тех пор, как я был в школе, но, кажется, я помню только одного учителя у доски.

3. Я думаю, что может быть ученик-учитель и настоящий учитель или что-то в этом роде. У меня был один класс в средней школе, в котором учитель рисования и учитель музыки чередовались / сотрудничали по какой-то причине.

4. Спасибо за ваш ответ, я продолжаю пробовать. Но да, это для занятий на открытом воздухе, и иногда у них есть 2 или 3 учителя, например, для класса sea kayak, где у 1 учителя может быть только 6 учеников одновременно.