繁体   English   中英

为tabcontrol中的每个tabitem添加多个datatable和tabitem.content

Add multiple datatable and tabitem.content for each tabitem in tabcontrol

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

    This is my xmal code for tabcontrol 
    <TabControl  x:Name="tabControl1" Grid.Row="2"  Height="auto" Width="auto" ItemsSource="{Binding tabs}" SelectionChanged="tabControl1_SelectionChanged" SelectedItem="{Binding SelectedEvaluation}" TabStripPlacement="Top" >
                <TabControl.ContentTemplate >
                    <DataTemplate>
                        <DataGrid x:Name="dataGrid1" IsReadOnly="True" Height="auto" Width="auto" ItemsSource="{Binding}" AutoGenerateColumns="False" >
                            <DataGrid.Columns>
                                <DataGridTextColumn Width="*" Header="Day"  Binding="{Binding [Day]}"/>
                                <DataGridTextColumn Width="*" Header="Date" Binding="{Binding [Date]}"/>
                                <DataGridTextColumn Width="*" Header="Time" Binding="{Binding [Time]}"/>
                                <DataGridTextColumn Width="*" Header="Lat" Binding="{Binding [Lat]}"/>
                                <DataGridTextColumn Width="*" Header="Long" Binding="{Binding [Long]}"/>
                                <DataGridTextColumn Width="*" Header="Address" Binding="{Binding [Address]}"/>
                                <DataGridTextColumn Width="*" Header="Accuracy" Binding="{Binding [Accuracy]}"/>
                                <DataGridTextColumn Width="*" Header="Type" Binding="{Binding [Type]}"/>
                            </DataGrid.Columns>
                        </DataGrid>
                    </DataTemplate>
                </TabControl.ContentTemplate>
            </TabControl>


And this is my code to create tabs
public void LoadData()
{
    sy.OpenFileDialog op = new sy.OpenFileDialog();
    op.Multiselect = true;

    if (op.ShowDialog() == sy.DialogResult.OK)
    {
        for each (string s in op.FileNames)
        {
            val = s;
            values = s.Split('\\');
            lastItem = values[values.Length - 1];                   
            newTabItem = new TabItem
            {
                Header = lastItem,
            };
            tabControl1.Items.Add(newTabItem);
            ReadJsonFile();                   

            DataTable dt = new DataTable();
            dt.Columns.Add("Day", typeof(string));
            dt.Columns.Add("Date", typeof(string));
            dt.Columns.Add("Time", typeof(string));
            dt.Columns.Add("Lat", typeof(string));
            dt.Columns.Add("Long", typeof(string));
            dt.Columns.Add("Address", typeof(string));
            dt.Columns.Add("Type", typeof(string));

            foreach (var item in data)
            {
                dt.Rows.Add(item.getDay(), item.getDate(), item.getTime(), item.getLat(), item.getLongi(), item.getAddresst(), item.getTYpe());                    
            }
            newTabItem.Content =  dt;

        }
    }
}

public void ReadJsonFile()
{
    string json = string.Empty;

    using (StreamReader r = new StreamReader(val))
    {
        json = r.ReadToEnd();
        var test = JObject.Parse(json);
        JArray items = (JArray)test["locations"];
        int length = items.Count;
        data = new List<Info>();

        for (int i = 0; i < items.Count; i++)
        {
            var d = test["locations"][i]["timestampMs"];
            double dTimeSpan = Convert.ToDouble(d);
            DateTime dtReturn = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Math.Round(dTimeSpan / 1000d)).ToLocalTime();
            string printDate = dtReturn.DayOfWeek.ToString() + "," + " " + dtReturn.ToShortDateString() + " " + dtReturn.ToShortTimeString();
            day = dtReturn.DayOfWeek.ToString();
            date = dtReturn.ToShortDateString();
            time = dtReturn.ToShortTimeString();
            var e = test["locations"][i]["latitudeE7"];
            var f = test["locations"][i]["longitudeE7"];
            //getLocationByGeoLocation(e.ToString(), f.ToString());                   
            var g = test["locations"][i]["activity"] != null;

            if (g == true)
            {
                JArray items1 = (JArray)test["locations"][i]["activity"];
                int length1 = items1.Count;

                while (j < items1.Count )
                {
                    if(j == 0)
                    { 
                        var h = test["locations"][i]["activity"][j]["activity"][j]["type"];
                        type = h.ToString();
                        j = 1;
                    }
                    else { }
                j++;
            }
            j = 0;
        }
        else { }

        Info ddm = new Info(day, date, time, lat, longi, address, type);
        data.Add(ddm);                   
    }
}
return;

}

现在我想在创建每个新选项卡时为每个选项卡创建一个数据表。 例如。 如果我创建 5 个选项卡,然后为每个选项卡打开新数据表和选项卡项目内容,因为我想在所有选项卡上应用过滤器,但如果打开了两个选项卡,那么我只能在最后打开的选项卡上应用过滤器。

此图像显示两个选项卡已打开但当我应用过滤器第一个选项卡无法过滤

在此处输入图片说明

并应用最后一个选项卡过滤器在此处输入图片说明

我不知道该怎么做,请帮助我

1 个回复

我对您发布的样本感到困惑

您正在将 tabcontrol itemssource 绑定到选项卡,但我没有看到您在代码中设置 tabs 属性的位置。 Next 当你绑定 itemssource 时,你的 Itemtemplate 在哪里? Next LoadData 描述您直接将项目添加到 tabControl,而不是添加到 tabs 属性。

你能按照下面提到的简单步骤操作吗? 1. 在加载数据中填写您的 tabs 属性。 请注意,将 tabs 属性创建为 Observable 集合。 此外,您不应该将属性创建为数据集(数据表列表),我建议使用 Notify 属性创建简单的类。 2. 将tabs 属性绑定到tabControl itemssource 3. 为tabControl 定义Itemtemplate 就是这样。

请颠倒您的要求。 即首先创建数据集(我建议创建 ObservableCollection)。 将其绑定到 tabControl。 因此,您将在 tab 属性中为每个项目获得一个 tabitem。 接下来你要应用过滤器。 这很简单。 GetSelectedItem 并应用您的过滤器。 并重置上一项的过滤器。 您可以在 SelectoinChange 事件参数中获取上一个和当前的 selectedItem。

希望它会起作用

9 如何使用wpf从TabItem或TabControl中的TabItem本身获取控件/ UIElement?

我有一个使用MVVM Wpf c#的tabcontrol。 现在,我想在活动选项卡时默认使用焦点控制,但在移动选项卡时它不会失去焦点。 我使用了实时可视树,但未激活,因为参数是viewmodel。 我已经使用FocusManger获取控件的焦点,因此我需要从tabItem本身获取控件/ U ...

2017-09-11 02:39:08 1 38   wpf
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM