【发布时间】:2014-08-23 17:03:40
【问题描述】:
你能告诉我如何将 WPF DataGrid 绑定到 ObservableCollection。我看过一些帖子,但没有找到直接的答案。到处都描述了复杂的问题,但我的问题并不复杂。我有一个可观察的集合和 WPF DataGrid。它们都在 WPF 应用程序中,它是双工合同 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 绑定到 ObservableCollection?给这个话题一个提示。请原谅我的英语不好。
【问题讨论】:
-
有什么问题?你读过stackoverflow.com/questions/15087131/…吗?您的 ObservableCollection 属性位于哪个类中?
-
ObservableCollection 位于 WPF 应用程序的主窗口类中,它是 WCF 服务的客户端,DataGrid 也是如此。
-
我也有同样的问题。由于某种原因,数据协定类不能与 observablecollection 一起使用。我改成简单的类,它起作用了……@user3769902