Я пытаюсь создать динамически созданный TabControl со встроенной сеткой данных для каждой созданной вкладки.
Почему динамически создаются вкладки? Пользователь может открыть несколько файлов, а количество выбранных файлов равно количеству вкладок.
Почему Датагрид внутри вкладок. Каждая вкладка содержит (в будущем) огромное количество рассчитанных данных, которые должны быть показаны в таблице данных.
Этот подход показывает таблицу данных в каждой вкладке, а также столбец «Имя», но под ним не отображаются данные.
XAML:
<TabControl x:Name="TabControlCells" Margin="10,291,635,0" Height="229" VerticalAlignment="Top">
<TabControl.ContentTemplate>
<DataTemplate>
<StackPanel>
<DataGrid x:Name="DataGridCells" CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False" ItemsSource="{Binding Files}" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
C #:
private void Calculate(object sender, RoutedEventArgs e)
{
void ThreadCompletion() {
this.Dispatcher.Invoke(() => {
TabControlCells.Visibility = Visibility.Visible;
foreach (File file in Globals.Files) {
TabItem item = new TabItem {
Header = file.FileName.Split('.')[0]
};
item.Content = file.Cells;
TabControlCells.Items.Add(item);
}
TabControlCells.SelectedIndex = 0;
});
}
Thread Calculations = new Thread(() =>
{
try
{
Mean.CalculateBaselineMean();
}
finally
{
ThreadCompletion();
}
});
Calculations.Start();
}
Класс файла:
private readonly int _id;
private string _path;
private string _filename;
private double _limit;
private bool _high_stimulus_output;
private bool _normalized_data_output;
private List<Cell> _cells;
private int _cellCount;
private int _rowCount;
private double _minutes;
private string[] _content;
public File(int ID, string Path, string FileName, double Limit,bool High_Stimulus_Output, bool Normalized_Data_Ouput, List<Cell> Cells, int CellCount, int RowCount, double Minutes, string[] Content)
{
_id = ID;
_filename = FileName;
_path = Path;
_limit = Limit;
_high_stimulus_output = High_Stimulus_Output;
_normalized_data_output = Normalized_Data_Ouput;
_cells = Cells;
_cellCount = CellCount;
_rowCount = RowCount;
_minutes = Minutes;
_content = Content;
}
public string FileName { get => _filename; set => _filename = value; }
public int ID { get => _id;}
public string Path { get => _path; set => _path = value; }
public double Limit { get => _limit; set => _limit = value; }
public bool High_Stimulus_Output { get => _high_stimulus_output; set => _high_stimulus_output = value; }
public bool Normalized_data_output { get => _normalized_data_output; set => _normalized_data_output = value; }
public int CellCount { get => _cellCount; set => _cellCount = value; }
public int RowCount { get => _rowCount; set => _rowCount = value; }
public double Minutes { get => _minutes; set => _minutes = value; }
public string[] Content { get => _content; set => _content = value; }
internal List<Cell> Cells { get => _cells; set => _cells = value; }
Класс сотовой связи:
class Cell
{
private string _name;
private List<TimeFrame> _time_frames;
private double _baseline_mean;
private double _all_mean;
private List<TimeFrame> _normalized_time_frames;
private double _maximum;
private double _over_under_limit;
private int _high_stimulus_per_minute;
public Cell(string Name, List<TimeFrame> Timeframes, double Baseline_Mean, double All_Mean, List<TimeFrame> Normalized_Timeframes, double Maximum, double Over_Under_Limit, int High_Stimulus_Per_Minute) {
_name = Name;
_time_frames = Timeframes;
_baseline_mean = Baseline_Mean;
_all_mean = All_Mean;
_normalized_time_frames = Normalized_Timeframes;
_maximum = Maximum;
_over_under_limit = Over_Under_Limit;
_high_stimulus_per_minute = High_Stimulus_Per_Minute;
}
public string Name { get => _name; set => _name = value; }
public List<TimeFrame> Timeframes { get => _time_frames; set => _time_frames = value; }
public double Baseline_Mean { get => _baseline_mean; set => _baseline_mean = value; }
public double All_mean { get => _all_mean; set => _all_mean = value; }
public List<TimeFrame> Normalized_Timeframes { get => _normalized_time_frames; set => _normalized_time_frames = value; }
public double Maximum { get => _maximum; set => _maximum = value; }
public double Over_under_limit { get => _over_under_limit; set => _over_under_limit = value; }
public int High_stimulus_per_minute { get => _high_stimulus_per_minute; set => _high_stimulus_per_minute = value; }
}
Класс TimeFrame:
class TimeFrame
{
private readonly int _id;
private readonly double _value;
private readonly int _including_minute;
public TimeFrame(int ID, double Value, int Including_Minute) {
_id = ID;
_value = Value;
_including_minute = Including_Minute;
}
public int ID { get => _id; }
public double Value { get => _value; }
public int Minute { get => _including_minute; }
}
Я искал несколько часов и пробовал несколько решений, найденных на github, но безуспешно.
Я думаю, что-то не так с привязками? Или есть что-то еще, что я едва пропустил?
Заранее спасибо.