gpt4 book ai didi

wpf - 如何使用 WPF 和 MVVM 将数据库中的数据加载到 DataGrid?

转载 作者:行者123 更新时间:2023-12-04 19:27:37 26 4
gpt4 key购买 nike

我是 WPF 和 MVVM 的新手,所以如果这个查询非常简单,我提前道歉。我在网上搜索过,但没能找到符合我要求的东西。明白为什么我在这里!

我目前正在尝试使用 LINQ 实现从数据库查询的数据表。这是我运行的查询:

DataContext connection = new DataContext();

var getTripInformation = from m in connection.tblTrips
where m.TripDate > DateTime.Today
select new { m.TripID, m.TripName, m.TripDate, m.ClosingDate, m.PricePerAdult, m.PricePerChild, m.Status };

它用我期望的相关信息填充我的 var。

现在,我想要做的是使用 DataGrid 在我的 View 中显示它。谁能帮我解决这个问题?

最佳答案

简而言之,您将拥有 View 和 ViewModel。 ViewModel 将需要实现 INotifyPropertyChanged 接口(interface)以促进 View 绑定(bind)。这只是提供了一个事件,当您更改 ViewModel 的属性时会引发该事件。然后您的 View 将绑定(bind)到 ViewModel 的属性。只要 View 的 DataContext 设置为 ViewModel 实例,这就有效。下面,这是在代码隐藏中完成的,但许多纯粹主义者直接在 XAML 中执行此操作。一旦定义了这些关系,运行您的 LINQ 查询以填充 ObservableCollection(它还实现了 INotifyPropertyChanged 用于在内部添加/删除项目时),您的网格将显示数据。

View 模型

public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

private ObservableCollection<MyRecord> _records = null;
public ObservableCollection<MyRecord> Records
{
get { return _records; }
set
{
if( _records != value )
{
_records = value;

if( this.PropertyChanged != null )
{
this.PropertyChanged( this, new PropertyChangedEventArgs( "Records" ) );
}
}
}
}

public MyViewModel()
{
this.Records = new ObservableCollection<MyRecord>();
this.LoadData();
}

private void LoadData()
{
// this populates Records using your LINQ query
}

查看(代码隐藏)

public class MyView : UserControl
{
public MyView()
{
InitializeControl();

// setup datacontext - this can be done directly in XAML as well
this.DataContext = new MyViewModel();
}
}

查看(XAML)

<DataGrid
ItemsSource="{Binding Path=Records, Mode=OneWay}"
...
/>

如果您在 DataGrid 上设置 AutoGenerateColumns = 'True',它将为绑定(bind)项类型的每个公共(public)属性创建一行。如果将此值设置为 false,则需要明确列出列以及它们将映射到的属性。

关于wpf - 如何使用 WPF 和 MVVM 将数据库中的数据加载到 DataGrid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11155786/

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