2

オブジェクトのコレクションがあり、それぞれが一連の名前と値のペアを保持しています。名前はすべてのオブジェクトで同じです。これらをデータ グリッドの列として表示したいと思います。

Winforms/WPF ではITypedList、いくつかのPropertyDescriptorインスタンスで使用して、ランタイムにいくつかの偽のプロパティを提供します。ただし、このタイプは Silverlight では使用できないようです。

では、代替手段はありますか、それとも Silverlight には存在しませんか?

いくつかのコードを追加して編集し、シナリオをより適切に構成します

public class Cell {
    public string Name { get; private set; }
    public string Value { get; private set; }
}

public class Row {
    public IEnumerable<Cell> Cells { get; private set; }
}

public class ViewModel {
    public IEnumerable<Row> Rows { get; private set; }
}

<sdk:DataGrid ItemsSource="{Binding Rows}" />

行/セルのルックアップを機能させてデータを入力するにはどうすればよいDataGridですか? 具体的には、プロパティが変更されたらバインディングを介してグリッドを更新する必要がありRowsます (バインディングが応答する変更イベントが発生すると仮定します)。

4

1 に答える 1

1

最終的に、バインディングと文字列インデクサーを使用して、この問題を解決することができました。

public class Row {
    public RowData Data { get; private set; }
}

public class RowData {
    public string this[string name] {
        get { return ...; }
    }
}

次に、グリッド列を手動で構築します。

foreach (var column in Columns)
{
    _grid.Columns.Add(new DataGridTextColumn
    {
        Binding = new Binding(string.Format("Data[{0}]", column.Name)),
        Header = column.Name,
        IsReadOnly = true
    });
}

これは、データが自動的に更新されたことを意味します。私の場合、Dataプロパティ全体が置き換えられ、INotifyPropertyChangedバインディングを通知するために実装されたためです。

于 2011-10-04T08:01:16.967 に答える