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的列并添加新的列。