DataBinding在DataTemplate for DataGrid rowdetails中不起作用

时间:2012-01-04 10:17:00

标签: c# wpf xaml data-binding

我有一个打开了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的经验非常短暂。

非常感谢任何建议。 海军报

1 个答案:

答案 0 :(得分:2)

GridSubItems必须是DataGrid绑定的ItemsSource的属性。否则你必须在RowDetailsDataTemplate中使用RelativeSource。但那不是真正的孩子关系...

<DataGrid ItemsSource="{Binding MyDataWithAlsoAPropertyGridSubItems}">
  //Columns...
  //RowDetailsTemplate with Binding to GridSubItems 
</DataGrid>

编辑:在你的情况下,你的GridItemData对象需要一个公共属性GridSubItems来直接使用RowDetailsTemplate