3

動的データ バインディングがたくさんあるDataGridので、常にAutoGenerateColumns=True. bool列の場合は が生成されますがDataGridCheckBoxColumn、null 許容の bool ( bool?C# の場合) はデフォルトの が生成されますDataGridTextColumn。nullable boolDataGridの自動生成を強制する方法はありますか? DataGridCheckBoxColumn実装に依存しないハックを好まない。また、イベントなどでいくつかのコード ビハインドが受け入れられAutoGeneratingColumnます。

4

2 に答える 2

0

試してみる必要があります-私はVSの近くにいません-しかし、これを使用して簡単に解決できるはずです...

私の他の投稿を見てください...
AutoGenerateColumnsがTrueに設定されているときに特定の列がDataGridで生成されるのを止める方法は?

その「メソッド」をbindコマンドに使用します(すべてMVVMストレートです-添付プロパティ
が必要です。AutoGenerateColumnEvent

次に、コマンド処理で、私が行ったように-列を置き換えます-すでに提案したように。

1)Attach提供されたクラスを使用し、名前空間などを追加します。

2)そしてあなたのXAMLで...

<DataGrid 
    local:Attach.AutoGenerateColumnEvent="{Binding AutoGeneratingColumnCommand}" AutoGenerateColumns="True" />  

3)そしてあなたのビューモデルで...

RelayCommand _autoGeneratingColumnCommand;
public RelayCommand AutoGeneratingColumnCommand 
{ 
    get 
    { 
        return _autoGeneratingColumnCommand ?? (_autoGeneratingColumnCommand = new RelayCommand(param => 
        { 
            var e = param as DataGridAutoGeneratingColumnEventArgs;
            var type = ((PropertyDescriptor)e.PropertyDescriptor).PropertyType;
            if (type == typeof(bool?))
                e.Column = new DataGridCheckBoxColumn();
        }, 
        param => true)); 
    } 
}

注:より一般的な解決策については...

を使用しPropertyDescriptorてプロパティ タイプを取得し、それに基づいて一般的な決定を下すことができます。だからあなたはそれを試してみる必要があります.

于 2013-04-09T16:40:14.720 に答える