0

(型指定された) データベース テーブルの最大フィールド長に従って、WPF アプリケーションのテキスト エントリの長さを制限しようとしています。このアプリケーションは DataSet を採用し、ODP.NET を使用して Oracle データベースに接続します。

保守性を向上させ、多くの作業を省くために、すべての TextBox コントロールの MaxLength を、DataSet で指定されている現在のテーブルの対応する列の MaxLength にバインドしたいと考えています。

私たちの場合、そのような動作を実装する最も効率的な方法は何ですか?

4

1 に答える 1

0

私はまったく同じ要件を持っていました、そしてこれは私が思いついたものです:

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の部分に入れることさえできるはずです。

于 2011-04-14T15:32:02.867 に答える