MaxLength в WPF TextBox из свойства Column в DataSet - PullRequest
0 голосов
/ 14 апреля 2011

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

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

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

1 Ответ

0 голосов
/ 14 апреля 2011

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

сохраните 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.

...