gpt4 book ai didi

wpf - 如何将 Entity Framework 中的实体绑定(bind)到 DataGrid?

转载 作者:行者123 更新时间:2023-12-05 00:17:33 26 4
gpt4 key购买 nike

我的 XAML:

<Window x:Class="Newsletter.UI.MessagesWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MessagesWindow" Name="messagesWindow" Height="576" Width="1024" WindowStartupLocation="CenterScreen" Closed="MessagesWindowClosed">
<Window.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Width" Value="149"/>
<Setter Property="Margin" Value="10"/>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="75"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Name="saveButton" Grid.Row="0" Content="Save" Margin="10,10,10,5"/>
<TextBox Name="searchTextBox" Grid.Row="1" Margin="10,5,10,10"/>
</Grid>
<Button Name="recipientsButton" Content="RECIPIENTS" Click="RecipientsButtonClick" />
<Button Name="createButton" Content="CREATE" Click="CreateButtonClick" />
<Button Name="removeButton" Content="REMOVE" />
<Button Name="editButton" Content="EDIT" />
<Button Name="resendButton" Content="RESEND"/>
</StackPanel>
<DataGrid Name="gridMessages" Grid.Row="1"/>
</Grid>
</Window>

我的 .cs 代码:

private void messagesWindow_Loaded(object sender, RoutedEventArgs e)
{
using (NewsletterEntities context = new NewsletterEntities())
{
var query = from m in context.Messages select m;
var result = query.ToList();
gridMessages.DataContext = result;
}
}
EF 生成的

Message 类:

[EdmEntityTypeAttribute(NamespaceName="NewsletterModel", Name="Message")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Message : EntityObject
{
#region Factory Method

/// <summary>
/// Create a new Message object.
/// </summary>
/// <param name="messageID">Initial value of the MessageID property.</param>
/// <param name="subject">Initial value of the Subject property.</param>
/// <param name="content">Initial value of the Content property.</param>
/// <param name="hasAttachments">Initial value of the HasAttachments property.</param>
/// <param name="senderID">Initial value of the SenderID property.</param>
/// <param name="date">Initial value of the Date property.</param>
public static Message CreateMessage(global::System.Int32 messageID, global::System.String subject, global::System.String content, global::System.Boolean hasAttachments, global::System.Int32 senderID, global::System.DateTime date)
{
Message message = new Message();
message.MessageID = messageID;
message.Subject = subject;
message.Content = content;
message.HasAttachments = hasAttachments;
message.SenderID = senderID;
message.Date = date;
return message;
}

#endregion

#region Primitive Properties

/// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
[DataMemberAttribute()]
public global::System.Int32 MessageID
{
get
{
return _MessageID;
}
set
{
if (_MessageID != value)
{
OnMessageIDChanging(value);
ReportPropertyChanging("MessageID");
_MessageID = StructuralObject.SetValidValue(value);
ReportPropertyChanged("MessageID");
OnMessageIDChanged();
}
}
}
private global::System.Int32 _MessageID;
partial void OnMessageIDChanging(global::System.Int32 value);
partial void OnMessageIDChanged()

不幸的是,没有任何反应,DataGrid 是空的。我不熟悉 WPF 和 EF 中的数据绑定(bind)。我希望这个问题很简单,但我不知道如何解决。

最佳答案

ItemsSource 设置为结果集,而不是 DataContext。

gridMessages.ItemsSource = result;

注意 由于您是 WPF 的新手,您可能需要注意 MVVM 比此处的方法更好,因为它可以将 UI 与业务逻辑分开。要使用 MVVM 方法,您需要将窗口的 DataContext 设置为某个 View Model 类:

private void messagesWindow_Loaded(object sender, RoutedEventArgs e) 
{
Model = new ViewModel();
this.DataContext = Model;
// TODO set Model.Messages to the EF result set
}

ViewModel 看起来像这样:

public class ViewModel : INotifyPropertyChanged
{
private List<Message> _messages;

public List<Message> Messages
{
get { return _messages; }
set
{
_messages = value;
RaisePropertyChanged("Messages");
}
}

// TODO implement INotifyPropertyChanged
}

然后将 DataGrid 的 ItemsSource 绑定(bind)到您的属性。

<DataGrid ItemsSource="{Binding Messages}" Grid.Row="1"/>

关于wpf - 如何将 Entity Framework 中的实体绑定(bind)到 DataGrid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13277327/

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