gpt4 book ai didi

c# - 尝试将数据绑定(bind)从 MainWindow.xaml.cs 移动到另一个 ViewModel 模块

转载 作者:行者123 更新时间:2023-12-03 10:32:22 24 4
gpt4 key购买 nike

我正在尝试创建一个从串行端口到达的值表。新数据到达串行端口后,表格将立即更新。

到目前为止,只有一个 xaml 文件。

我一直在关注this迄今为止有效的实现,但只有当我将对象数组分配给 MainWindow.xaml.cs 中的 DataGrid 时(如该示例中所示),它曾经看起来像这样:

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 ;
}

XAML 中的 DataGrid 如下所示:
  <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 布局,其中包含用于模型、 View 模型、 View 文件的单独文件夹,而不是主类中发生的所有内容。

我希望整个结构大致相似
View <-> View 模型 <-> 模型

为此,我创建了另一个文件 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。

如果我改变 thisMainWindow并尝试
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 正确传递数组,我还不如在那里做其他所有事情,而不是再花几天(几周)尝试弄清楚如何正确或完全做到这一点。

谢谢

最佳答案

您应该设置 TableDat您的 View 模型的属性。为此,您只需删除 var构造函数中的关键字:

class DataGridViewModel : ObservableObject
{
public ObservableCollection<LineViewModel> TableDat { get; private set; }

public DataGridViewModel()
{
TableDat = new ObservableCollection<LineViewModel>()
{
new LineViewModel(1,2,888,6,5),
new LineViewModel(122,2,888,6,5),
};
}
}

然后您可以绑定(bind) ItemsSource DataGrid 的属性(property)到 TableDat返回 ObservableCollection<LineViewModel> 的 View 模型的属性使用 {Binding}句法:
<DataGrid ItemsSource="{Binding TableDat}" ... />

关于c# - 尝试将数据绑定(bind)从 MainWindow.xaml.cs 移动到另一个 ViewModel 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52723960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com