【问题标题】:DataBinding doesn't work inside DataTemplate for DataGrid rowdetailsDataBinding 在 DataTemplate 中对 DataGrid rowdetails 不起作用
【发布时间】:2012-01-04 10:17:00
【问题描述】:

我有一个启用了 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>

但是我在我的应用程序中看不到子项,列表框显示为空。 如果我直接在数据模板中定义子项,我可以看到它们,所以我猜问题出在我的数据绑定中,但对于我的生活,我看不出有什么问题。我应该承认我对 WPF 的体验非常短暂。

非常感谢您的任何建议。 浮动

【问题讨论】:

  • 向我们展示您如何将该数据模板应用到 XAML 中的控件
  • 查看“输出”窗口是否有错误。我通常会在那里找到问题。
  • @Nagg - 查看我编辑的问题
  • @Lucian - 输出窗口中没有任何可疑之处

标签: c# wpf xaml data-binding


【解决方案1】:

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

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

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

【讨论】:

  • 抱歉这么笨,正如我提到的,我是 WPF 的新手,但我将 DataGrid 绑定到 GridItems,而不是 GridSubItems。我想绑定到 GridSubItems 的是 rowdetails。
  • 但是我已经在 GridDataSource 类中有 GridSubItems 公共属性
  • 但您的子项不是子项 - 它只是与 GridItems 无关的第二个集合。
  • 好的,我明白你的意思了。我会尽力让你知道。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2023-04-11
  • 2011-09-01
  • 2016-04-13
  • 1970-01-01
相关资源
最近更新 更多