C# 在xaml中访问嵌入式WPF控件

C# 在xaml中访问嵌入式WPF控件,c#,wpf,silverlight,xaml,C#,Wpf,Silverlight,Xaml,假设我获得了以下用户控件: <UserControl x:Class="MyUserControl"> <tk:DataGrid> <tk:DataGrid.Columns> <!-- some columns --> </tk:DataGrid.Columns> </tk:DataGrid> </UserControl> 实际上,我不

假设我获得了以下用户控件:

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

有可能做到这一点吗


注意:DataGrid.Columns是只读的,无法将其绑定到其他内容。

您可以在名为
Columns
用户控件上公开一个名为
Columns
的文件,该文件可以绑定到内部
DataGrid
。当然,您可以通过
访问该属性。

正如@H.B.在他的解决方案中所说的,您应该公开自己的依赖属性,但仅仅执行绑定是不起作用的,因为
属性是只读的

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


不幸的是,我不认为只有XAML可以解决这个问题。

我尝试了类似的方法,但是绑定到DataGrid.Columns是不可能的。DataGrid.Columns为只读,不允许绑定。我认为我想在代码中做的应该是可能的,但是,我想以一种更简单/干净的方式实现这一点,如果可能的话,可以通过xaml(仅限)实现。如果无法绑定,可以在注册dependency属性的地方附加一个,然后在这个回调中手动清除内部DataGrid的列并添加新的列。