Флажок не установлен в DevExpress GridControl с использованием wpf

Я пытаюсь работать со столбцом флажка DevExpress GridControl, но проблема в том, что когда я динамически привязываю значение флажка в коде XAML, он не работает идеально, ниже я предоставляю вам код моего демонстрационного проекта: -

XAML-код: -

<dxg:GridControl AutoPopulateColumns="True" HorizontalAlignment="Left"  Margin="0,40,0,0" Name="gridControl1" VerticalAlignment="Top" Height="318" Width="503">
            <dxg:GridControl.View>
                <dxg:TableView Name="tableView1" ShowTotalSummary="True" />
            </dxg:GridControl.View>
            <dxg:GridControl.Columns>
                <dxg:GridColumn DisplayMemberBinding="{Binding Path=EvenOdd}" Header="Even/Odd" />
                <dxg:GridColumn Name="PickColumn" Header="Pick" Width="30" 
                                    AllowColumnFiltering="False" AllowSorting="False">
                    <dxg:GridColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox IsChecked="{Binding Path=IsValid}"
                                          HorizontalAlignment="Center" VerticalAlignment="Center" >
                            </CheckBox>
                        </DataTemplate>
                    </dxg:GridColumn.CellTemplate>
                </dxg:GridColumn>
            </dxg:GridControl.Columns>
        </dxg:GridControl>

мой код файла cs: -

public class ss
{
  public bool IsValid { get; set; }
  public string EvenOdd { get; set; }
}

Код позади:

    public List<ss> sList = new List<ss>();


    private void Window_Loaded(object sender, RoutedEventArgs e)
    {

        for (int i = 0; i < 10; i++)
        {

            if (i % 2 == 0)
            {
                sList.Add(new ss { IsValid = true, EvenOdd = "Even" });
            }
            else
            {
                sList.Add(new ss { IsValid = false, EvenOdd = "Odd" });
            }
        }

       gridControl1.ItemsSource = sList;
    }

person Jay Shukla    schedule 23.07.2013    source источник


Ответы (3)


Добавление к ответу HighCore. Если вы хотите отредактировать данные в вашей сетке.

См. Свойство ColumnBase.CellTemplate:

  • Чтобы включить редактирование данных, используйте редактор, поставляемый с библиотекой редакторов данных DevExpress для WPF. Имя редактора должно быть установлено на «PART_Editor».
  • Стандартные элементы управления могут использоваться в CellTemplate только для отображения. Редактирование данных запрещено.

Потом,

xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" 

<dxg:GridColumn Name="PickColumn" 
                Header="Pick" 
                Width="30" 
                AllowColumnFiltering="False" 
                AllowSorting="False">
    <dxg:GridColumn.CellTemplate>
        <DataTemplate>
            <dxe:CheckEdit x:Name="PART_Editor"
                           EditValue="{Binding Path=Data.IsValid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
        </DataTemplate>
    </dxg:GridColumn.CellTemplate>
</dxg:GridColumn>

Вам все еще нужно использовать реализацию HighCore INotifyPropertyChanged.

person Willem    schedule 23.07.2013
comment
Спасибо @Willem и @HighCore! - person Jay Shukla; 24.07.2013

В первую очередь нужно исправить привязку внутри CellTemplate:

<CheckBox IsChecked="{Binding Path=RowData.Row.IsValid}"/>

Во-вторых, ваши элементы данных должны реализовывать INotifyPropertyChanged:

 public class ss:INotifyPropertyChanged
    {
        private bool _isValid;
        private string _evenOdd;

        public bool IsValid
        {
            get { return _isValid; }
            set
            {
                _isValid = value;
                OnPropertyChanged("IsValid");
            }
        }

        public string EvenOdd
        {
            get { return _evenOdd; }
            set
            {
                _evenOdd = value;
                OnPropertyChanged("EvenOdd");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
person Federico Berasategui    schedule 23.07.2013

   xmlns:dxgcore="http://schemas.devexpress.com/winfx/2008/xaml/grid"


     <dxgcore:GridColumn Width="20"  
                         AllowEditing="True"  
                         Binding="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  
                         Header="R"  
                         Visible="{Binding CheckboxSelection}"  
                         VisibleIndex="6">  
                 <dxgcore:GridColumn.CellTemplate>  
                   <DataTemplate>  
                     <dxe:CheckEdit HorizontalAlignment="Center"  
                             VerticalAlignment="Center"  
                             Command="{Binding 
Path=View.DataContext.IsCheckedCommand}"  
                             CommandParameter="{Binding RowData.Row}"  
                             IsChecked="{Binding RowData.Row.IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  
                             IsEnabled="{Binding Path=View.DataContext.IsCheckBoxEnabled, UpdateSourceTrigger=PropertyChanged}" />  
                   </DataTemplate>  
                 </dxgcore:GridColumn.CellTemplate>  
               </dxgcore:GridColumn>  

И свойство Notifychanged

private bool _isChecked;
public bool IsChecked
{
    get { return _isChecked; }
    set
    {
        _isChecked = value;
        RaisePropertyChanged("IsChecked");
    }
}
person Mohammad Atiour Islam    schedule 26.01.2017