Я пытаюсь создать таблицу значений, поступающих из последовательного порта.Таблица обновится, как только новые данные поступят в последовательный порт.
Пока существует только один файл xaml.
Я следил за этой реализацией, которая работала такдалеко, но только когда я назначаю массив объектов DataGrid в MainWindow.xaml.cs (как в этом примере), который выглядел так:
public MainWindow()
{
InitializeComponent();
var TableDat = new ObservableCollection<LineViewModel>()
{
new LineViewModel(1,2,888,6,5), // Random values to see if anyhting dipslays
new LineViewModel(122,2,888,6,5),
};
this.dataGrid1.ItemsSource = TableDat ;
}
DataGrid в XAML выглядел так:
<DataGrid AutoGenerateColumns="False"
Height="Auto"
HorizontalAlignment="Left"
Name="dataGrid1"
VerticalAlignment="Top"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Visible"
Grid.Row="1">
<DataGrid.Columns >
<DataGridTextColumn Binding="Item1" Width="*">
<DataGridTextColumn Binding="Item2" Width="*" />
<DataGridTextColumn Binding="Item3" Width="*" />
<DataGridTextColumn Binding="Item4" Width="*" />
<DataGridTextColumn Binding="Item5" Width="*" />
</DataGrid.Columns>
</DataGrid>
Я хотел разделить свой проект на то, что я считаю правильным макетом MVVM с отдельными папками для моделей, моделей представления, файлов просмотра и не всего, что происходит внутри класса Main.
Я хочу, чтобы вся структура приблизительно напоминала
View <-> ViewModel <-> Model
Для этого я создал другой файл DataGridViewModel.cs, который будет создавать экземпляр массива объектов и передаватьэто к dataGrid1 DataGrid.
Это мой MainWindow.xaml.cs
public partial class MainWindow : Window {
private DataGridViewModel _dat = new DataGridViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = _dat;
}
}
Это класс, из которого я хотел бы передать массив объектов в упомянутую DataGrid.
class DataGridViewModel : ObservableObject
{
public ObservableCollection<LineViewModel> TableDat { get; private set; }
public DataGridViewModel()
{
var TableDat = new ObservableCollection<LineViewModel>()
{
new LineViewModel(1,2,888,6,5),
new LineViewModel(122,2,888,6,5),
};
//Here I would like to pass the object array to the data grid, dataGrid1
}
}
Сейчас
this.dataGrid1.ItemsSource = TableDat;
Выход:
Severity Code Description Project File Line Suppression State Error CS1061
'DataGridViewModel' does not contain a definition for 'dataGrid1' and no accessible
extension method 'dataGrid1' accepting a first argument of type 'DataGridViewModel'
could be found(are you missing a using directive or an assembly reference ?)
Я думаю, это потому, что я пытаюсь передать его в MainWindow.xaml, а не DataGrid.xaml.
Если я изменю this
на MainWindow
и попробую с
MainWindow.dataGrid1.ItemsSource = TableDat;
, который, я надеюсь, связал бы его с соответствующим файлом xaml, который я получил:
Severity Code Description Project File Line Suppression State Error CS0120
An object reference is required for the non-static field, method, or property
'MainWindow.dataGrid1'
Я новичок в объектно-ориентированных вещах, и многие из этих концепций в настоящий момент находятся у меня над головой, так что простите меня, если я не формулирую то, что я пытаюсь сказать, или не использую правильную терминологию.
Я на грани поражения и признаю, что если мне удастся правильно передать массив из моего MainWindow.xaml.cs, я мог бы просто сделать это там и все остальное тоже, вместо того, чтобы потратить еще несколько дней (недель)пытаясь понять, как сделать это правильно или вообще.
спасибо