DataGrid で OneWay Binding
WPFToolKit の DataGrid は便利でよく出来ていますが、Preview 版であり、まだまだ惜しいところがあります。
今日引っかかったのが Read Only なプロパティ (setter しかない) を Binding でバインドできないこと。強制的に TwoWay Binding するように設定されるため、「Read Only なプロパティには TwoWay や OneWayToSource は使えないよ!」と例外が出ます。
対応は既に検討されていて、final release まで待てるなら問題ないようです。IsReadOnly も public になるそうです。
そういうわけで今回手元で対応した方法は仮であり、簡単にできる方法を採りました。Microsoft.Windows.Controls.DataGridBoundColumn#EnsureTwoWay を変更して、BindingMode が明示されていない場合のみ TwoWay に置き換えるという方法です。
private static void EnsureTwoWay(BindingBase bindingBase) { // If it is a standard Binding, then set the mode to TwoWay Binding binding = bindingBase as Binding; if (binding != null) { // if (binding.Mode != BindingMode.TwoWay) ↓こう変更 if (binding.Mode == BindingMode.Default) { binding.Mode = BindingMode.TwoWay; TEMP_UpdateSourceWorkaround(binding); } return; } // A multi-binding can be set to TwoWay as well MultiBinding multiBinding = bindingBase as MultiBinding; if (multiBinding != null) { // if (multiBinding.Mode != BindingMode.TwoWay) ↓こう変更 if (multiBinding.Mode == BindingMode.Default) { multiBinding.Mode = BindingMode.TwoWay; TEMP_UpdateSourceWorkaround(multiBinding); } return; } (略) }
final release までの場つなぎ、または手元の独自版ということで。