1

可以说我得到了以下用户控制:

<UserControl x:Class="MyUserControl">
    <tk:DataGrid>
        <tk:DataGrid.Columns>
            <!-- some columns -->
        </tk:DataGrid.Columns>
    </tk:DataGrid>
</UserControl>

实际上,我无法定义数据网格应该有哪些列,因为我需要在很多地方使用这个控件,使用不同的列。这是我想做的事情:

<UserControl x:Class="MyPanel">
    <ui:MyUserControl>
        <Columns>
            <!-- columns that will go into the data grid -->
        </Columns>
    </ui:MyUserControl>
</UserControl>

有可能实现这一目标吗?

PS:DataGrid.Columns 是只读的,无法将其绑定到其他东西。

4

2 回答 2

2

您可以在被调用者上公开一个依赖属性,该属性可以绑定到内部. 您当然可以通过访问该物业。UserControlColumnsDataGrid<ui:MyUserControl.Columns>

于 2012-09-07T10:54:15.817 回答
1

正如@HB 在他的解决方案中所说,您应该公开自己的依赖属性,但仅执行绑定是行不通的,因为该Columns属性是只读的。

您需要做的是在依赖属性的OnChange回调中处理此问题,并根据需要添加/删除列。您还需要注册到您的依赖属性的CollectionChanged事件,可能还有网格的列CollectionChanged,以同步这两个属性。

不幸的是,我认为没有针对此的仅限 XAML 的解决方案。

于 2012-09-07T11:29:52.137 回答