来自DataSet中Column属性的WPF TextBox中的MaxLength

时间:2011-04-14 14:43:48

标签: wpf binding textbox dataset maxlength

我正在尝试根据我们(类型化)数据库表中的最大字段长度来限制WPF应用程序中的文本条目长度。该应用程序使用DataSet并使用ODP.NET连接到Oracle数据库。

为了更好的可维护性并且从大量工作中拯救我们,我们希望将所有TextBox控件的MaxLength绑定到DataSet中指定的当前表的相应列中的MaxLength。

在我们的案例中,实施此类行为的最有效方法是什么?

1 个答案:

答案 0 :(得分:0)

我有完全相同的要求,这就是我想出的:

将MaxLength存储为VM中的属性,然后通过列的EditingElementStyle设置单元格的MaxLength属性(假设它的类型为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部分。