私はまったく同じ要件を持っていました、そしてこれは私が思いついたものです:
MaxLengthをプロパティとしてVMに保存してから、セルのMaxLengthプロパティを列のEditingElementStyleを介して設定します(DataGridTextBoxColumnタイプの場合)。
VM内:
private static readonly DependencyProperty MaxLengthProperty = TextBox.MaxLengthProperty.AddOwner(typeof(MyCellVM));
internal int MaxLength
{
get { return (int)(GetValue(MaxLengthProperty)); }
set { SetValue(MaxLengthProperty, value); }
}
次に、列のコンストラクターで:
EditingElementStyle = new Style(typeof(TextBox));
EditingElementStyle.Setters.Add(new Setter(TextBox.MaxLengthProperty, new Binding(source + "MaxLength") { Mode = BindingMode.OneWay }));
注意:次のように、列のコンストラクターでソース変数を設定する必要がありました。
string source = String.Format(CultureInfo.InvariantCulture, "[{0}].", dataGrid.Columns.Count);
これを行ったのは、実行時にdataGridの列にデータを入力していて、その数が事前にわからないためですが、構造が固定されている場合は、これがさらに簡単になり、適応できるはずです。このコードをxamlの部分に入れることさえできるはずです。