Максимальная длина в текстовом поле WPF из свойства столбца в наборе данных

#wpf #binding #textbox #dataset #maxlength

#wpf #привязка #текстовое поле #набор данных #максимальная длина

Вопрос:

Я пытаюсь ограничить длину текстовых записей в нашем приложении WPF в соответствии с максимальной длиной поля в наших (типизированных) таблицах базы данных. Приложение использует наборы данных и подключается к базе данных Oracle с помощью ODP.NET.

Для улучшения удобства обслуживания и избавления нас от большой работы мы хотели бы привязать максимальную длину всех элементов управления TextBox к максимальной длине в соответствующем столбце текущей таблицы, который указан в DataSet.

Каков наиболее эффективный способ реализовать такое поведение в нашем случае?

Ответ №1:

У меня было точно такое же требование, и это то, что я придумал:

сохраните 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’s во время выполнения и я заранее не знаю, сколько их будет, но если у вас фиксированная структура, это еще проще для вас, вы должны быть в состоянии адаптироваться, вы даже должны быть в состоянии поместить этот код в часть xaml.