DataGridのColumnWidthプロパティに列幅をバインドするのは、最初にのみ機能します

私はこのようなDataGridを定義しています


重要な部分はColumnWidthへのバインディングです。コードの別の部分では、DependencyProperty "ItemWidth"を変更します。デバッグの目的のために、私はColumnWidthConverterのConvertメソッドに次のコードを書きました:

Console.Out.WriteLine("Convert, ItemWidth:" + itemWidth);

今アプリケーションを起動すると、Convertメソッドは最初から呼び出されますが、コードの他の部分からDPを変更すると、もはや変換されません。さらに、最初の幅はDataGridから取得されませんが、autoまたは何かに正しく設定されています(幅は最長のエントリとまったく同じです)。

私もUpdateSourceTriggerで作業しようとしましたが、私は解決策を見つけ出しませんでした。

その理由は何ですか?これをどのように修正できますか?

0
「コードの他の部分からDPを変更する」とはどういう意味ですか? ItemWidthは依存関係プロパティですか?
追加された 著者 Clemens,
デバッガでアプリケーションを実行してからItemWidthを変更すると、Visual Studioの出力ウィンドウにバインドエラーメッセージがないかどうかチェックしましたか?
追加された 著者 Clemens,
また、ItemWidthを設定したオブジェクトが、バインディングが参照するもの、つまり ColumnAxis という要素の DataContext.RootItem と同じであることを100%確信していますか?または、RootItem、または DataContext さえ何らかの形で変更されている可能性がありますか?バインディング自体は大丈夫だと思われ、他のコードを投稿していないので、ここでは少し推測しています。
追加された 著者 Clemens,
別の推測:双方向バインディングの問題を除外するには Mode = OneWay を設定します。あなたのコンバータはConvertBackを実装していますか?
追加された 著者 Clemens,
はい、そうです。そして、このDP(DependencyProperty)をコードの別の部分から変更します。
追加された 著者 Hauke,
はい、私はしました。残念ながらそこには何もありません)。そして、私はどこに問題があるのか​​知っています。
追加された 著者 Hauke,
はい、私は異なる値で初期化しようとしたので100%確信しています。それから私はConvertメソッドでそれらを読み、それらは同じです。同様に、コードの別の部分で使用されるDPは、この開始値を持ちます。
追加された 著者 Hauke,
追加された 著者 Hauke,

1 答え

私はコード内で同じことをやろうとしましたが、それは動作しませんでした(DataGridのColumnWidthプロパティで)。しかし、コードの後ろにある各セルの幅を変更すると、機能します。

私はこれを好きです:

foreach (DataGridColumn dgc in DataTable.Columns)
{
    dgc.Width = //The DependencyProperty
} 
0
追加された