問題

WPF DataGridをObservableCollectionにバインドする方法のヒントを教えてください。私はいくつかの投稿を見て、直接の答えを見つけられませんでした。どこにでも複雑な問題が記述されていますが、私の問題はむしろ洗練されていません。私は観察可能なコレクションとWPF DataGridを持っています。どちらもWPFアプリケーション 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の各インスタンスが受信された後、前のインスタンスを同じ一意の識別子に置き換えるためにObservableC

 [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にバインドするにはどうすればよいですか?このトピックについてのヒントを教えてください。私は私の貧しい英語のためにあなたの恩赦を袋に入れます。

  ベストアンサー

グリッドのItemsSourceプロパティを使用し、コレクション(おそらくビューモデルにあります)を参照すると、次のようになります。

 ItemsSource="{Binding Path=DownloadsCollection}" 
 

次に、コレクション内のMyClassオブジェクトの情報(プロパティ)を表示するために、列にバインドを追加します。

それを行う方法に関するより詳細なチュートリアルについては、このリンクをチェックしてください。

編集:

このようなことを試して、すべてが正しく動作し、カスタム列に移動するかどうかを確認することができます。

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

  同じタグがついた質問を見る

c#wpfwcf