19

WPF テキスト ボックスの Maxlength プロパティを、クラス内の既知の定数にバインドしようとしています。私はc#を使用しています。

クラスの構造は、次のものとあまり似ていません。

namespace Blah
{
    public partial class One
    {
        public partial class Two
        {
             public string MyBindingValue { get; set; }

             public static class MetaData
             {
                 public static class Sizes
                 {
                     public const int Length1 = 10;
                     public const int Length2 = 20;
                 }
             }
        }
    }
}

はい、深くネストされていますが、残念ながら、この例では、大幅な書き換えが必要になるまで、物事をあまり動かすことができません。

テキストボックスのMaxLengthをLength1またはLength2の値にバインドできることを望んでいましたが、うまくいきません。

バインディングは次のようなものになると予想していました。

<Textbox Text="{Binding Path=MyBindingValue}" MaxLength="{Binding Path=Blah.One.Two.MetaData.Sizes.Length1}" />

どんな助けでも大歓迎です。

どうもありがとう

4

5 に答える 5

41
MaxLength="{x:Static local:One+Two+MetaData+Sizes.Length1}"

期間はプロパティを参照します。プラス記号は内部クラスを表します。

于 2008-10-24T10:48:29.400 に答える
7

修理済み!

最初に私はこれをやってみました:

{Binding Path=MetaData+Sizes.Length1}

これは正常にコンパイルされましたが、クラス 'Two' がデータコンテキストであるにもかかわらず、バインディングは実行時に失敗し、パスは内部の静的クラスに解決できませんでした (次のようなことを行うことができたでしょうか: {Binding Path={x:Static MetaData+Size .Length1}} ?)

クラスのレイアウトを少しいじる必要がありましたが、バインディングは現在機能しています。

新しいクラス構造:

namespace Blah
{
    public static class One
    {
        // This metadata class is moved outside of class 'Two', but in this instance
        // this doesn't matter as it relates to class 'One' more specifically than class 'Two'
        public static class MetaData
        {
            public static class Sizes
            {
                public static int Length1 { get { return 10; } }
                public static int Length2 { get { return 20; } }
            }
        }

        public partial class Two
        {
            public string MyBindingValue { get; set; }
        }
    }
}

次に、私の拘束力のある声明は次のとおりです。

xmlns:local="clr-namespace:Blah"

MaxLength="{x:Static local:MetaData+Sizes.Length1}"

これは問題なく動作するようです。定数をプロパティに変換する必要があるかどうかはわかりませんが、そうしても害はないようです。

助けてくれてありがとう!

于 2008-10-24T12:42:22.467 に答える
0

x:Static でバインドしてみてください。Sizes の名前空間を持つ xmlns:local 名前空間を xaml ヘッダーに追加し、次のようにバインドします。

{x:Static local:Sizes.Length1}
于 2008-10-24T10:17:50.633 に答える
0

残念ながら、次のエラーが発生しますType 'One.Two.MetaData.Sizes' not found。「Blah」よりも深いローカル名前空間を作成することはできません(とにかくVS2008によれば)

xmlns:local="clr-namespace:Blah"

MaxLength="{x:Static local:One.Two.MetaData.Sizes.Length1}"
于 2008-10-24T10:31:47.733 に答える
0

One が静的クラスでない場合、x:Static でバインドすることはできません。なぜ内部クラスを使用するのですか?メタデータが 2 の範囲外で、Sizes がプロパティの場合、x:Static で簡単にアクセスできます。この場合、型にバインドすることはできず、既存のオブジェクトにのみバインドできます。One と Two は型であり、オブジェクトではありません。

于 2008-10-24T10:39:55.330 に答える