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
}
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
}