1

MyList<BusinessObject>には、DataGrid の列にバインドするパブリック プロパティがいくつかあります。残念ながら、パブリック プロパティの名前は適切ではなく、実行時までそれらが何であるかさえわからない可能性があります。このため、AutoGenerateColumns=Trueを設定し、各 DataGridAutoGeneratingColumnEvent をインターセプトして、それが何であるかを検査し、キャンセルするか、非表示にするか、ヘッダーに別の名前を付けることができます。

それはうまく機能しますが、すべての列が生成され、誰かがセルを編集すると INotifyPropertyChanged イベントが発生するようにMode=TwoWayを設定する方法がわかりません。

おまけの質問: グリッドの行を上下に移動すると、グリッドのデータ コンテキストは自動的にその行のデータ コンテキストに設定されBusinessObjectますか?

4

2 に答える 2

0

バインディングが正しい場合、ビジネス オブジェクトは必要な更新を自動的に受け取ります。プログラムでバインドするには、次のようなコードがもう少し必要になる場合があります。

...
Binding binding = new Binding("Propertyname");
tc.binding.Mode = BindingMode.TwoWay;
...
于 2009-11-26T13:15:48.907 に答える
0

この投稿のおかげで、バインドが DataGridTextColumn で行われることがわかりました。したがって、実行時にモードを設定する方法は次のとおりです。

1    private void DataGrid1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
2    {
3        DataGridTextColumn tc = (DataGridTextColumn)e.Column;
4        tc.Header = "Custom Header";
5        tc.Binding.Mode = BindingMode.TwoWay;
6    }

TwoWay バインディングができたので、変更が BusinessObject にどのように反映されるかを理解する必要があります。

于 2009-11-03T23:14:43.640 に答える