我有一个打开了rowdetails属性的WPF工具包网格。
我的rowdetails模板如下
<DataTemplate x:Key="rowDetailsTemplate">
<Border BorderBrush="Black" BorderThickness="1" Background="#BFEFF2F5">
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical">
<ListBox Margin="100, 0, 0, 0" ItemsSource ="{Binding Path=GridSubItems}">
</ListBox>
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>
在后面的代码中定义了GridSubItems:
public class GridDataSource
{
private List<GridItemData> _GridItems = new List<GridItemData>();
private List<GridItemData> _GridSubItems = new List<GridItemData>();
public List<GridItemData> GridItems
{
get
{
return _GridItems;
}
set
{
_GridItems = value;
}
}
public List<GridItemData> GridSubItems
{
get
{
return _GridSubItems;
}
set
{
_GridSubItems = value;
}
}
}
及其在XAML中定义的数据:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:myapp="clr-namespace:MyControlsDemo.DemoResources"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<myapp:GridDataSource x:Key="dgs">
<myapp:GridDataSource.GridItems>
<myapp:GridItemData Name="Item1" Type="Numeric" Unit="MHz" Key="i1" />
<myapp:GridItemData Name="Item2" Type="List" Unit="enum" Key="i2" />
<myapp:GridItemData Name="Item3" Type="Text" Unit="text" Key="i3" />
</myapp:GridDataSource.GridItems>
<myapp:GridDataSource.GridSubItems>
<myapp:GridItemData Name="SubItem1" Type="Numeric" Unit="MHz" Key="si1" />
<myapp:GridItemData Name="SubItem2" Type="Numeric" Unit="MHz" Key="si2" />
<myapp:GridItemData Name="SubItem3" Type="Numeric" Unit="MHz" Key="si3" />
</myapp:GridDataSource.GridSubItems>
</myapp:GridDataSource>
这就是使用此数据模板的方式:
<ContentControl Grid.Column="2">
<centerpanel:GenericParametersGrid DataContext="{StaticResource dgs}"
ItemsSource="{Binding Path=GridItems}"
RowDetailsTemplate="{StaticResource ResourceKey=rowDetailsTemplate}"
Style="{StaticResource ResourceKey=centerPanelHierParameterGridStyle}"/>
</ContentControl>
但是我在应用程序中看不到子项,列表框显示为空。 如果我直接在datatemplate中定义子项,我可以看到它们,所以我猜问题是在我的数据绑定中,但对于我的生活,我看不出有什么问题。我应该承认我对WPF的经验非常短暂。
非常感谢任何建议。 海军报
答案 0 :(得分:2)
GridSubItems必须是DataGrid绑定的ItemsSource的属性。否则你必须在RowDetailsDataTemplate中使用RelativeSource。但那不是真正的孩子关系...
<DataGrid ItemsSource="{Binding MyDataWithAlsoAPropertyGridSubItems}">
//Columns...
//RowDetailsTemplate with Binding to GridSubItems
</DataGrid>
编辑:在你的情况下,你的GridItemData对象需要一个公共属性GridSubItems来直接使用RowDetailsTemplate