你能给我一个如何将WPF DataGrid绑定到ObservableCollection的技巧吗?我看过一些帖子并没有找到直接答案.这里和任何地方都有错综复杂的问题,但我的问题并不复杂.我有一个可观察的集合和WPF DataGrid.它们都在WPF应用程序中,它是双工合同WCF服务的客户端.这是一个ObservableCollection:
private ObservableCollection<MyClass> _myCollection = new ObservableCollection<MyClass>();
public ObservableCollection<MyClass> DownloadsCollection
{
get { return this._downloadsCollection; }
}
Run Code Online (Sandbox Code Playgroud)
这是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>
Run Code Online (Sandbox Code Playgroud)
这是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
}
Run Code Online (Sandbox Code Playgroud)
如何在我的示例中将DataGrid绑定到ObservableCollection?提供一个关于这个主题的提示.我赦免了我糟糕的英语.
您应该可以通过使用ItemsSource网格的属性并引用您的集合(可能位于视图模型中)来执行此操作,如下所示:
ItemsSource="{Binding Path=DownloadsCollection}"
Run Code Online (Sandbox Code Playgroud)
然后在列上添加一个绑定,以显示MyClass集合中对象的信息(属性).
编辑:
你可以简单地尝试这样的东西,看看是否一切正常,然后转移到自定义列:
<DataGrid ItemsSource="{Binding DownloadsCollection}" />
Run Code Online (Sandbox Code Playgroud)
<DataGrid x:Name="employeeGrid" HorizontalAlignment="Center" VerticalAlignment="Center" AlternatingRowBackground="LightBlue" AlternationCount="2" AutoGenerateColumns="False" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Header="Emp #" Binding="{Binding EmpId}"/>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
以下内容位于相应的 .cs 文件中:
employeeGrid.ItemsSource = employeeDetails;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42692 次 |
| 最近记录: |