1

我在控件中有一个数据网格(此处:DataGridSelectorControl),我想使用 ItemTemplate 创建它的库。实际上我想做这样的事情:

  <DataGrid  x:Name="grd" ItemsSource="{Binding Source={StaticResource theSource}}" AutoGenerateColumns="False"  >
                <DataGrid.Columns>
                <ItemsControl ItemsSource="{Binding DataGridColumnItems}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal" />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                </ItemsControl>
                </DataGrid.Columns>
            </DataGrid>

我想知道有没有办法为 DataGrid.Columns 使用 ItemsControl?我想这样做是因为我想像这样使用这个控件:(我想在创建这个控件的实例时定义 DataGridTextColumns)

<control:DataGridSelectorControl Grid.Row="1">
        <control:DataGridSelectorControl.DataGridColumnItems>
                <DataGridTextColumn Header="نام"  Width="20"></DataGridTextColumn>
                <DataGridTextColumn Header="ParentID" Width="20"></DataGridTextColumn>
        </control:DataGridSelectorControl.DataGridColumnItems>
    </control:DataGridSelectorControl>

和 DataGridColumnItems 是一个连接属性:

  public static readonly DependencyProperty DataGridTextColumnItemsProperty = DependencyProperty.Register("DataTextColumnItems", typeof(DataGridColumn), typeof(DataGridSelectorControl));
    public DataGridColumn DataGridColumnItems
    {
        get
        {
            return (DataGridColumn)GetValue(DataGridTextColumnItemsProperty);
        }
        set
        {
            SetValue(DataGridTextColumnItemsProperty, value);
        }
    }
4

1 回答 1

0

DataGrid.Columns 是 ObservableCollection 类型,试试这样的:

  public static readonly DependencyProperty DataGridTextColumnItemsProperty=DependencyProperty.Register("DataTextColumnItems", typeof(ObservableCollection<DataGridColumn>), typeof(DataGridSelectorControl)))); 
    public ObservableCollection<DataGridColumn> DataGridColumnItems 
    { 
        get 
        { 
            return (ObservableCollection<DataGridColumn>)GetValue(DataGridTextColumnItemsProperty); 
        } 
        set 
        { 
            SetValue(DataGridTextColumnItemsProperty, value); 
        } 
    }

  <DataGrid  x:Name="grd" ItemsSource="{Binding Source={StaticResource theSource}}" AutoGenerateColumns="False" Columns={Binding DataGridTextColumnItems, RelativeSource={RelativeSource AncestorType=DataGridSelectorControl}}> 
            </DataGrid> 
于 2012-04-17T10:46:35.760 回答