将ObservableCollections的ObservableCollection绑定到TabControl TabItems中的嵌套ListView

与其像在下面的第一个TabControl中那样显式地声明每个ObservableCollections的选项卡,我不如在第二个TabControl中那样动态地生成它们,并将嵌套ListView的ItemsSource设置为每个嵌套的ObservableCollections。

换句话说:为什么第二个TabControl中嵌套的ListView的ItemSource绑定不起作用?有没有一种方法可以将嵌套ObservableCollection的索引设置为包含ObservableCollection的索引?

或者:如何使第二个动态TabControl和嵌套的ListView看起来像第一个静态TabControl和嵌套的ListViews?

using System.Collections.ObjectModel;
using System.Windows;

namespace GridViewColumns2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            ViewModel viewModel = new ViewModel();

            viewModel.ThingCollections = new ObservableCollection<ThingCollection>();

            viewModel.ThingCollections.Add(new ThingCollection { Name = "One" });
            viewModel.ThingCollections[0].Things = new ObservableCollection<Thing>();
            viewModel.ThingCollections[0].Things.Add(new Thing { Name = "One.One" });
            viewModel.ThingCollections[0].Things.Add(new Thing { Name = "One.Two" });
            viewModel.ThingCollections[0].Things.Add(new Thing { Name = "One.Three" });


            viewModel.ThingCollections.Add(new ThingCollection { Name = "Two" });
            viewModel.ThingCollections[1].Things = new ObservableCollection<Thing>();
            viewModel.ThingCollections[1].Things.Add(new Thing { Name = "Two.One  " });
            viewModel.ThingCollections[1].Things.Add(new Thing { Name = "Two.Two" });
            viewModel.ThingCollections[1].Things.Add(new Thing { Name = "Two.Three" });

            DataContext = viewModel;
        }
    }

    public class ViewModel
    {
        public ObservableCollection<ThingCollection> ThingCollections { get; set; }
    }

    public class ThingCollection
    {
        public string Name { get; set; }

        public ObservableCollection<Thing> Things { get; set; }
    }

    public class Thing
    {
        public string Name { get; set; }
    }
}



<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <TabControl>
        <TabItem>
            <TabItem.Header>One</TabItem.Header>
            <TabItem.Content>
                <ListView ItemsSource="{Binding Path=ThingCollections[0].Things}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Width="120" Header="Name" DisplayMemberBinding="{Binding Name}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </TabItem.Content>
        </TabItem>
        <TabItem>
            <TabItem.Header>Two</TabItem.Header>
            <TabItem.Content>
                <ListView ItemsSource="{Binding Path=ThingCollections[1].Things}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Width="120" Header="Name" DisplayMemberBinding="{Binding Name}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </TabItem.Content>
        </TabItem>
    </TabControl>

    <TabControl Grid.Column="1" ItemsSource="{Binding Path=ThingCollections}">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </TabControl.ItemTemplate>
        <TabControl.ContentTemplate>
            <DataTemplate>
                <ListView ItemsSource="{Binding Path=ThingCollections[0].Things}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Width="120" Header="Name" DisplayMemberBinding="{Binding Name}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>


</Grid>
埃利·阿尔贝尔(Eli Arbel)

当您在中时DataTemplate,该项DataContext已经是该项(在您的情况下为ThingCollection类)。

所以代替:

<ListView ItemsSource="{Binding Path=ThingCollections[0].Things}">

利用:

<ListView ItemsSource="{Binding Path=Things}">

要诊断将来的绑定错误,请按F5键(开始调试),然后在“输出”窗口中查看。所有绑定错误将记录在此处。在这种情况下,这表明它找不到ThingCollections在object中命名的属性ThingCollection

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将TabControl内容的数据上下文绑定到ObservableCollection中的视图模型的实例

来自分类Dev

如何将 ObservableCollection 绑定到 ListView?

来自分类Dev

wpf 帮助将数据绑定到 TabControl 中的控件

来自分类Dev

将Listview内的组合框绑定到ObservableCollection <string>

来自分类Dev

MVVM将ObservableCollection绑定到Listview不起作用

来自分类Dev

无法将列表框绑定到类中的ObservableCollection

来自分类Dev

将DatagridColumn绑定到StaticResource,指向WPF中的ObservableCollection

来自分类Dev

将ObservableCollection中的各个按钮绑定到视图

来自分类Dev

将列表中的类的属性从ObservableCollection绑定到Datagrid

来自分类Dev

我可以将ObservableCollection中的单个属性绑定到WPF中的ListView吗?

来自分类Dev

在 XAML 中对绑定到 ObservableCollection 的 ListView 进行排序

来自分类Dev

将一个按钮绑定到每个在TabControl中的3个不同的DataGrid

来自分类Dev

无法将ObservableCollection绑定到包含自定义控件的listView

来自分类Dev

在Android上使用Simple Mvvm Toolkit将ObservableCollection绑定到ListView

来自分类Dev

将TextBox.Text绑定到ObservableCollection中的类中的属性

来自分类Dev

MVVM-如何将字符串的ObservableCollection绑定到ListBox WPF中

来自分类Dev

使用 MVVM 将 ObservableCollection 绑定到 WPF 应用程序中的 ComboBox

来自分类Dev

将ListView嵌套到DropdownMenu中

来自分类Dev

将ListView绑定到ObservableSet

来自分类Dev

更新绑定到 Listview 的 ObservableCollection 中的项目时,指定的强制转换无效

来自分类Dev

WPF中的嵌套ObservableCollection数据绑定

来自分类Dev

将ObservableCollection绑定到DataGrid

来自分类Dev

从DataTemplate中的DataGrid绑定到字符串的ObservableCollection

来自分类Dev

将嵌套的ItemsControl绑定到嵌套的集合

来自分类Dev

将嵌套的ItemsControls绑定到嵌套的集合

来自分类Dev

ListView中的WPF,MVVM,EventBehaviourFactory,将事件绑定到命令

来自分类Dev

使用ItemTemplate中的GridView将List <DataTable>绑定到ListView

来自分类Dev

将listview绑定到对象列表中的对象的属性

来自分类Dev

将按钮绑定到 listview dataTemplate 中的命令

Related 相关文章

  1. 1

    如何将TabControl内容的数据上下文绑定到ObservableCollection中的视图模型的实例

  2. 2

    如何将 ObservableCollection 绑定到 ListView?

  3. 3

    wpf 帮助将数据绑定到 TabControl 中的控件

  4. 4

    将Listview内的组合框绑定到ObservableCollection <string>

  5. 5

    MVVM将ObservableCollection绑定到Listview不起作用

  6. 6

    无法将列表框绑定到类中的ObservableCollection

  7. 7

    将DatagridColumn绑定到StaticResource,指向WPF中的ObservableCollection

  8. 8

    将ObservableCollection中的各个按钮绑定到视图

  9. 9

    将列表中的类的属性从ObservableCollection绑定到Datagrid

  10. 10

    我可以将ObservableCollection中的单个属性绑定到WPF中的ListView吗?

  11. 11

    在 XAML 中对绑定到 ObservableCollection 的 ListView 进行排序

  12. 12

    将一个按钮绑定到每个在TabControl中的3个不同的DataGrid

  13. 13

    无法将ObservableCollection绑定到包含自定义控件的listView

  14. 14

    在Android上使用Simple Mvvm Toolkit将ObservableCollection绑定到ListView

  15. 15

    将TextBox.Text绑定到ObservableCollection中的类中的属性

  16. 16

    MVVM-如何将字符串的ObservableCollection绑定到ListBox WPF中

  17. 17

    使用 MVVM 将 ObservableCollection 绑定到 WPF 应用程序中的 ComboBox

  18. 18

    将ListView嵌套到DropdownMenu中

  19. 19

    将ListView绑定到ObservableSet

  20. 20

    更新绑定到 Listview 的 ObservableCollection 中的项目时,指定的强制转换无效

  21. 21

    WPF中的嵌套ObservableCollection数据绑定

  22. 22

    将ObservableCollection绑定到DataGrid

  23. 23

    从DataTemplate中的DataGrid绑定到字符串的ObservableCollection

  24. 24

    将嵌套的ItemsControl绑定到嵌套的集合

  25. 25

    将嵌套的ItemsControls绑定到嵌套的集合

  26. 26

    ListView中的WPF,MVVM,EventBehaviourFactory,将事件绑定到命令

  27. 27

    使用ItemTemplate中的GridView将List <DataTable>绑定到ListView

  28. 28

    将listview绑定到对象列表中的对象的属性

  29. 29

    将按钮绑定到 listview dataTemplate 中的命令

热门标签

归档