在两个 tabview 中填充相同的数据

In two tabview populating same data

我是 c#、WPF 新手,

我使用选项卡控件在同一 Ui、

中展示两个不同的数据 table

即选项卡 A 和选项卡 B

选项卡 A- 仅显示甘特图,选项卡 B- 仅显示 Table 视图,两者具有不同的数据。

当我在 Table 视图中运行甘特图视图时数据显示。

原因:数据上下文的绑定

我对在一个应用程序中使用多个 DataContext 感到困惑,任何人都可以帮助我。

下面是我的代码:

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;


namespace APE.WPF.Controls.DynamicGrid
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        //public List<CsvGChart> DataContext1 { get; }

        public MainWindow()
        {
            InitializeComponent();
            ganttTab();
            tableTab();


        }

        public void ganttTab()
        {
            var random = new Random();
            var dataItems = new List<SampleGridItem>();

            for (int x = 0; x < 100; x++)
            {
                for (int y = 1; y < 10; y++)
                {
                    dataItems.Add(
                        new SampleGridItem()
                        {
                            ProductionDate = new DateTime(random.Next(2014, 2014), random.Next(1, 12), random.Next(1, 27)),
                            ProductName = string.Format("10-" + y),
                            ProductionCount = random.Next(1, 2) * random.Next(0, 30)
                        });
                }
            }

            DataContext = dataItems;


        }

        public void tableTab()
        {
            DataContext = FunctionalFun.UI.CsvParseDataService.ReadFile(@"Unit Records Sample.csv");
        }        
    }
}

创建一个具有 2 个属性的 DataContext,一个用于甘特图数据,一个用于 Table 数据,可能是这样的:

public class TabViewDataContext
{
    public List<SampleGridItem> GanttData { get; set; }
    public List<CsvGChart> TableData { get; set; }
}

并将每个控件绑定到相应的数据上下文 属性,class 应该如下所示:

namespace APE.WPF.Controls.DynamicGrid
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        //public List<CsvGChart> DataContext1 { get; }

        public MainWindow()
        {
            InitializeComponent();
            var context = new TabViewDataContext
            {
                GanttData = ganttTab(),
                TableData = tableTab()
            }
            this.DataContext = context;
        }

        public List<SampleGridItem> ganttTab()
        {
            var random = new Random();
            var dataItems = new List<SampleGridItem>();

            for (int x = 0; x < 100; x++)
            {
                for (int y = 1; y < 10; y++)
                {
                    dataItems.Add(
                        new SampleGridItem()
                        {
                            ProductionDate = new DateTime(random.Next(2014, 2014), random.Next(1, 12), random.Next(1, 27)),
                            ProductName = string.Format("10-" + y),
                            ProductionCount = random.Next(1, 2) * random.Next(0, 30)
                        });
                }
            }
            return dataItems;
        }

        //Not sure if this should return that type
        public List<CsvGChart> tableTab()
        {
            return FunctionalFun.UI.CsvParseDataService.ReadFile(@"Unit Records Sample.csv");
        }        
    }
}