WPF UserControl DataGrid列绑定C#

8dtrkrch  于 11个月前  发布在  C#
关注(0)|答案(1)|浏览(111)

我想在WPF中创建一个UserControl,它内部有一个DataGrid,我想像使用标准DataGrid一样使用它。例如,我的UserControl如下所示:

<UserControl x:Class="SupervisoreIB.UI.CustomControls.DataGridWithHeader"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             ...
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>

        <Border Grid.Row="0">
            <Label Content="test" />
        </Border>
        <Border Grid.Row="1">
            <DataGrid />
        </Border>
    </Grid>
</UserControl>

字符串
我想用的方法是这样的:

<uc:DataGridWithHeader Grid.Row="1" Grid.Column="0" Margin="10">
    <uc:DataGridWithHeader.Columns>
        <DataGridTextColumn Header="COL1" />
        <DataGridTextColumn Header="COL2" />
        <DataGridTextColumn Header="COL3" />
    </uc:DataGridWithHeader.Columns>
</uc:DataGridWithHeader>


我试着像这样使用列依赖性属性:

public ObservableCollection<DataGridColumn> Columns
{
    get { return (ObservableCollection<DataGridColumn>)GetValue(ColumnsProperty); }
    set { SetValue(ColumnsProperty, value); }
}

public static readonly DependencyProperty ColumnsProperty =
DependencyProperty.Register("Columns", typeof(ObservableCollection<DataGridColumn>), typeof(DataGridWithHeader), new PropertyMetadata(null, OnColumnsChanged));


但似乎没什么作用

4dbbbstv

4dbbbstv1#

您应该在UserControl的构造函数中初始化collection属性:

public partial class DataGridWithHeader : UserControl
{
    public DataGridWithHeader()
    {
        InitializeComponent();
        SetValue(ColumnsProperty, new ObservableCollection<DataGridColumn>());
    }

    ...
}

字符串
然后,您还需要使用回调中的列填充实际的DataGrid,例如:

private static void OnColumnsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    DataGridWithHeader dataGridWithHeader = (DataGridWithHeader)d;
    dataGridWithHeader.dataGrid.Columns.Clear();
    if (dataGridWithHeader.Columns != null)
        foreach (DataGridColumn column in dataGridWithHeader.Columns)
            dataGridWithHeader.dataGrid.Columns.Add(column);
}

相关问题