DataGrid.RowDetailsTemplate中的DataGrid具有相同的ItemsSource(当前项)

时间:2014-08-25 15:17:26

标签: c# wpf datagrid

我在DataGrid.RowDetailsTemplate中有一个DataGrid的问题。

我有一个ObservableCollection类,它有大约20个属性但没有其他集合。我想拆分它们以便更好地观看。名为“mainGrid”的第一个DataGrid应该显示前10个属性......

然后我定义了DataGrid.RowDetailsTemplate,以便在用户单击该行时显示其余部分。但它不起作用。第二个DataGrid位于RowDetailsTemplate

    <Dgv:DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <Dgv:DataGrid x:Name="dgvRowDetails">

                <Dgv:DataGrid.Columns>
                  <Dgv:DataGridTextColumn Header="Parameter 1" 
                               Binding="{Binding Parameter1}" />
                   <Dgv:DataGridTextColumn Header="Parameter 2" 
                               Binding="{Binding Parameter2}" />
                    </Dgv:DataGrid.Columns>
                </Dgv:DataGrid>
        </DataTemplate>
    </Dgv:DataGrid.RowDetailsTemplate>

它只显示RowDetails中的标题(当我点击一行时)但没有内容。 输出选项卡不显示任何绑定错误。

我想我也需要一个ItemsSource但是我不知道如何实现它,因为其他属性引用了current或selectedItem。

但这样可以正常工作:

    <Dgv:DataGrid.RowDetailsTemplate>
        <DataTemplate>
         <StackPanel>
          <TextBlock Text = "{Binding Parameter1}" />
          <TextBlock Text = "{Binding Parameter2}" />
         </StackPanel>
        </DataTemplate>
    </Dgv:DataGrid.RowDetailsTemplate>

但是我真的想要一个DataGrid,因为Headers等......

我正在使用.NET 3.5

非常感谢提前!

2 个答案:

答案 0 :(得分:0)

试试这个

 <Dgv:DataGrid x:Name="dgvRowDetails" ItemsSource="{Binding}">

答案 1 :(得分:0)

你真的不能这样做。 ItemsSource期望成为IEnumerable,您想要的是给它一个项目。

这是一种实现它的hacky方式。在对象的类中,绑定外部数据网格的ItemSource以定义以某些IEnumerable

的形式返回自身的新属性
public class MyClass
{
    public IEnumerable<MyClass> AsIEnumerable
    {
        get
        {
            yield return this;
        }
    }
}

XAML

//Inner datagrid
//Datacontext is MyClass object
<Dgv:DataGrid x:Name="dgvRowDetails" 
              AutoGenerateColumns="False" 
              ItemsSource="{Binding AsIEnumerable}">
    <Dgv:DataGrid.Columns>
       <Dgv:DataGridTextColumn Header="Parameter 1" 
                               Binding="{Binding Path=Parameter1}" />
       <Dgv:DataGridTextColumn Header="Parameter 2" 
                               Binding="{Binding Path=Parameter2}" />
    </Dgv:DataGrid.Columns>
</Dgv:DataGrid>

你说你想要标题。我的建议是使用适当的工具创建标题,而不是使用圆角正方形,因为圆圈存在。