DataGridTemplateColumn с CheckBox - PullRequest
       44

DataGridTemplateColumn с CheckBox

1 голос
/ 14 января 2012

У меня есть динамическая DataGrid, в которой один из столбцов является CheckBox. Я создал класс «Транзакции», в котором я связываю столбцы таблицы данных с различными свойствами в этом классе. Я хочу, чтобы мой флажок был привязан к свойству, которое является целым числом. Это целое число, потому что я заполняю свойства из запроса к моей базе данных. Возможные целые числа: 1 (True) или 0 (False). Вот что у меня есть для создания моей базы данных:

    private DataGridTemplateColumn GetVoidColumn()
    {
        DataGridTemplateColumn voidColumn = new DataGridTemplateColumn();
        voidColumn.Header = "Void";

        Binding bind = new Binding("Visible");
        bind.Mode = BindingMode.TwoWay;

        // Create the CheckBox
        FrameworkElementFactory voidFactory = new FrameworkElementFactory(typeof(CheckBox));
        voidFactory.SetValue(CheckBox.IsCheckedProperty, bind);
        DataTemplate voidTemplate = new DataTemplate();
        voidTemplate.VisualTree = voidFactory;

        voidColumn.CellTemplate = voidTemplate;

        return voidColumn;
    }

На моем фактическом Datagrid, CheckBox обнаруживается, но они всегда не проверяются, даже если свойство показывает 1. Даже когда я проверяю строку, значение, отображаемое для столбца, является правильным, содержит 1 или 0 в ItemArray строки. Просто по какой-то причине в пользовательском интерфейсе флажок не установлен. Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 14 января 2012

Вы можете использовать Converters для преобразования значений свойств 0 и 1 в false и true. Вероятно, свойство IsChecked не понимает значения 0 и 1. Создайте класс, который реализует IValueConverter, и примените этот конвертер для преобразования int в bool.

Другим вариантом может быть создание свойства для этого в вашем классе

public bool IsChecked
{
   get
   {
       if(IntProperty == 0)
          return false;
       return true;
   }
   set
   {
       if(value)
          IntProperty = 1;
       else 
          IntProperty = 0;
   }
}

теперь вместо привязки с int свойство связывать со свойством выше

...