0

タイトルを間違えるかもしれませんが、読み続けてください。

動的データグリッドが必要なので、「選択された」列を表示するこのメソッドを使用して列を作成しています。

    public void ConfigureGridColumns()
    {
        App.Instance.MainWindow.grdDetail.mainGrd.Columns.Clear();

        var stats = new List<Statistic>();
        stats.AddRange(App.Instance.Manager.PersonalizeStatistics.OrderBy(x => x.Index).Where(x => x.Selected).Select(x => x.Statistic));

        foreach (var stat in stats)
        {
            var column = new DataGridTextColumn
            {
                Header = stat.Name,
                Binding = new Binding(stat.Key)
            };
        }
    }

150を超える動的列があるため、すべての列を含むモデルを作成したくありません。

したがって、行の列が前のようにキーによってマップされるカスタムDataTableを構築することにより、ItemsSourceを動的に生成しています。

        private void ConfigureGridSource()
        {
        var dt = new DataTable("stats");

        foreach (var player in App.Instance.Manager.Players.Values.Take(5))
        {
            var row = dt.NewRow();
            foreach (var stat in stats)
            {
                if (!dt.Columns.Contains(stat.Statistic.Key))
                    t.Columns.Add(stat.Statistic.Key, typeof(StatisticPersonalizedValue));

                var persStat = new StatisticPersonalizedValue(stat);
                persStat.Value = player.Statistics[stat.Statistic.Key];

                row[stat.Statistic.Key] = persStat;
            }
            dt.Rows.Add(row);
        }
        grdDetail.mainGrd.ItemsSource = CollectionViewSource.GetDefaultView(dt.DefaultView);
        }

問題は次のとおりです。

        Binding = new Binding(stat.Key)

StatisticPersonalizedValueの名前空間をテキストとして取得します

        Binding = new Binding("Value")

空の文字列を取得します(Valueは、2番目のメソッドで評価されているStatisticPersonalizedValueのプロパティです)

場合に備えて正と負の値のセッターもあるのでモデルを使用していますが、これを修正する方法について何か考えがありますか?

4

1 に答える 1

0

わかりました、それを修正しました。

カスタムコンバーターを追加する必要がありました

Binding = new Binding(stat.Key) { Converter = new StatisticPersonalizedValueConverter() }



public class StatisticPersonalizedValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is StatisticPersonalizedValue)
        {
            return (value as StatisticPersonalizedValue).Value;
        }
        return string.Empty;

    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

これでうまくいきました。

于 2013-01-22T16:14:32.960 に答える