gpt4 book ai didi

c# - 如何将 WPF DataGrid 绑定(bind)到 ObservableCollection

转载 作者:太空狗 更新时间:2023-10-29 20:10:06 24 4
gpt4 key购买 nike

你能告诉我如何将 WPF DataGrid 绑定(bind)到 ObservableCollection 吗?我看过一些帖子,但没有找到直接的答案。到处都描述了复杂的问题,但我的问题并不复杂。我有一个可观察的集合和 WPF DataGrid。它们都在 WPF 应用程序中,该应用程序是双工契约(Contract) WCF 服务的客户端。这是一个 ObservableCollection:

private ObservableCollection<MyClass> _myCollection = new ObservableCollection<MyClass>();
public ObservableCollection<MyClass> DownloadsCollection
{
get { return this._downloadsCollection; }
}

这是带有 DataGrid 的 XAML 标记:

<Window x:Class="DownloadManager_Client.MainWindow"
. . . . . . . .>

<DataGrid Name="dgDownloadsInfo" Grid.Row="2" Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False"
CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False"
CanUserResizeRows="False" CanUserSortColumns="False" SelectionMode="Single" SelectionChanged="dgDownloadsInfo_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="DownloadId" Visibility="Hidden"/>
<DataGridTextColumn Header="Target URL" FontFamily="Arial" />
<DataGridTextColumn Header="Content Size" FontFamily="Arial"/>
<DataGridTextColumn Header="Path to Save" FontFamily="Arial"/>
<DataGridTextColumn Header="Bytes Downloaded" FontFamily="Arial"/>
<DataGridTextColumn Header="Percent (%)" FontFamily="Arial"/>
<DataGridTextColumn Header="Status" FontFamily="Arial"/>
</DataGrid.Columns>
</DataGrid>
. . . . . . . .
</Window>

这是 myClass 类。它在 WCF 服务中实现。客户端从具有双工协定的 WCF 服务的回调中接收 MyClass 的实例。在接收到 MyClass 的每个实例后,将其放入 ObservableCollection 中以用相同的唯一标识符替换前一个实例。

[DataContract]
public class MyClass
{
#region Properties

/// <summary>
/// Downloading unique ID.
/// </summary>
[DataMember]
public Guid UniqueId { get; set; }
/// <summary>
/// Target URL.
/// </summary>
[DataMember]
public String TargetUrl { get; set; }
/// <summary>
/// Path to Save.
/// </summary>
[DataMember]
public String PathToSave { get; set; }
/// <summary>
/// Percentage.
/// </summary>
[DataMember]
public Int32 Percentage { get; set; }
/// <summary>
/// Downloaded bytes number.
/// </summary>
[DataMember]
public Int64 DownloadedBytesQuantity { get; set; }
/// <summary>
/// Content size.
/// </summary>
[DataMember]
public Int64 RealContentLength { get; set; }
/// <summary>
/// Downloading status.
/// </summary>
[DataMember]
public String Status { get; set; }

#endregion
}

在我的示例中如何将 DataGrid 绑定(bind)到 ObservableCollection?给出关于这个话题的提示。请原谅我糟糕的英语。

最佳答案

您应该能够通过使用网格的 ItemsSource 属性并引用您的集合(可能位于您的 View 模型中)来做到这一点,如下所示:

ItemsSource="{Binding Path=DownloadsCollection}" 

然后在列上添加绑定(bind)以显示集合中 MyClass 对象的信息(属性)。

有关如何操作的更详细教程,请查看 this链接。

编辑:

您可以简单地尝试这样的操作,看看是否一切正常,然后转到自定义列:

<DataGrid ItemsSource="{Binding DownloadsCollection}" />

关于c# - 如何将 WPF DataGrid 绑定(bind)到 ObservableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539022/

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