У меня было точно такое же требование, и вот что я придумал:
сохраните MaxLength как свойство в вашей виртуальной машине, а затем установите свойство MaxLength ячейки через EditingElementStyle столбца (при условии, что он имеет тип DataGridTextBoxColumn):
в вашей виртуальной машине:
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.