5

DataGridTextColumn 内の DataGrid セルのバインディング式にアクセスする必要があります。例えば:

        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>

セルに関連付けられた TextBlock を取得できました。

        var cell = dataGrid.GetCellCtrl<TextBlock>(dataGrid.CurrentCell);

そしてセルは正しいようです。電話できる

        cell.SetValue(TextBlock.TextProperty, value);

セルのテキストを更新します。グリッド上で動作しているようです(番号が更新されました)。しかし、しばらくして気が付くと、ソースが更新されていません。UpdateSourceTriggerをPropertyChangeにしてもダメでした。次に、バインディング式を取得して UpdateSource を明示的に呼び出す必要があると考えました。

        var bindingExpr = cell.GetBindingExpression(TextBlock.TextProperty);

ただし、bindingExpr は常に null です。なんで?

編集:私が抱えていた元の問題は、セルのバインド TextBlock にアクセスし、TextBlock.TextProperty を設定できることでした。ただし、ソースは更新されません。これは、私がこの問題を解決しようとしているものです。

4

3 に答える 3

7

TextBoxにはDataGridTextColumnバインディング式がありません。列自体にバインディングがあります。

DataGridTextColumnはプロパティ notDataGridBoundColumnを使用するから派生しますが、プロパティは ではないため、通常のパブリック プロパティを使用してアクセスする必要があります。BindingBaseTextBlock.TextPropertyBindingDependancyProperty

Bindingそのため、プロパティDataGridTextColumnが typeであるため、少しキャストする必要がありますBindingBase

このようなものは動作するはずです(テストされていません)

var binding = (yourGrid.Columns[0] as DataGridBoundColumn).Binding as Binding;
于 2013-03-05T07:01:11.333 に答える