【问题标题】:Binding ObservableCollection<Tuple<Object, List<Object>>> to DataGrid将 ObservableCollection<Tuple<Object, List<Object>>> 绑定到 DataGrid
【发布时间】:2015-12-17 12:54:04
【问题描述】:

我有一个带有元组的 ObservableCollection,并且想将它绑定到我的 DataGrid。这是 ObservableCollection:

ObservableCollection<Tuple<NetworkItem, List<NetworkItem>>> ListNetworkItems = new ObservableCollection<Tuple<NetworkItem, List<NetworkItem>>>();

这是我的数据网格:

<DataGrid x:Name="NetworkDataGrid" 
          ItemsSource="{Binding ListNetworkItems}" >

    <DataGrid.Columns>

        <DataGridTemplateColumn Header="Sender">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Item1.Device.Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Receiver">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Item2.Device.Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

    </DataGrid.Columns>

</DataGrid>

问题是,如何绑定 ObservableCollection 中的第二项?这是 ObservableCollection 中 item1 下面的几个设备的列表。我的 DataGrid 应该如下所示:

Sender      Receiver
Device 1    Device 2
            Device 3
            Device 5
Device 2    Device 1
Device 3    Device 2
            Device 4

【问题讨论】:

  • 尝试将ItemsControl 放入Receiver 列的DataTemplate 中,并将Item2 绑定到该控件的ItemsSource 属性。

标签: c# .net wpf xaml datagrid


【解决方案1】:

您需要在第 2 列的单元格中使用另一个列表控件来显示您的子列表。

这样的事情应该可以工作:

<DataGridTemplateColumn Header="Receiver">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding Item2}">
                <ItemsControl.ItemTemplate>
                        <DataTemplate>
                                <TextBlock Text="{Binding Device.Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
                        </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

这将在 Receiver 列的每个单元格中创建一个 ItemsControl,以保存子列表中的项目列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 2011-04-10
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多