DataGrid 绑定复选框数据

DataGrid Binding checkbox data

xaml代码:

<DataTemplate x:Key="GridCheckBox">
    <StackPanel Orientation="Horizontal">
        <CheckBox IsChecked="{Binding stat, UpdateSourceTrigger=PropertyChanged}" Checked="CheckBox_Checked" Unchecked="UnCheckBox_Checked" HorizontalAlignment="Center" />
    </StackPanel>
</DataTemplate>

<xcdg:DataGridControl x:Name="_dataGrid" AllowDrag="False">
    <xcdg:DataGridControl.View>
        <xcdg:TableflowView FixedColumnCount="1" />
    </xcdg:DataGridControl.View>

    <xcdg:DataGridControl.Columns>
        <xcdg:Column FieldName="." Title="Select" Width="50" IsMainColumn="True"
                     CellContentTemplate="{StaticResource GridCheckBox}"            
                     GroupValueTemplate="{StaticResource GridCheckBox}"/>
    </xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

正在将数据填充到 xceed datagrid

 DataGridCollectionView collectionView = new DataGridCollectionView(dt.DefaultView);
          collectionView.GroupDescriptions.Add(new DataGridGroupDescription("filter"));
          _dataGrid.ItemsSource = collectionView;

所有其他细节都可以绑定但不是复选框;谁能帮我解决。

在您的 IsChecked-Binding 中,尝试为您的 Window/UserConrolt 提供一个 RelativeSource,您的 DataContext 所在的位置。

IsChecked-属性 的绑定类似于:

IsChecked="{Binding DataContext.stat, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}"

在对上一个答案的评论中,您说如果 stat=1 复选框应该被勾选。如果 stat 不是布尔值,则必须使用转换器才能绑定到 IsChecked 属性.

转换器应该很简单:

  public class StatConverter : IValueConverter
  {
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
      if (value is int)
      {
        return (int)value == 1;
      }

      return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
      throw new NotImplementedException();
    }

    #endregion
  }