Frage

Ich versuche, eine WPF-Textfeld des Maxlength Eigenschaft auf eine bekannte Konstante tief innerhalb einer Klasse zu binden. Ich bin mit c #.

Die Klasse hat eine Struktur, nicht unähnlich den folgenden:

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;
                 }
             }
        }
    }
}

Ja, es tief verschachtelt ist, aber leider in diesem Fall kann ich mich nicht bewegen Dinge abzurunden sehr viel ohne große Neufassungen erforderlich.

Ich hatte gehofft, ich wäre in der Lage, die Textbox MaxLength den Length1 oder Length2 Werte zu binden, aber ich kann es nicht arbeiten.

Ich habe erwartet, die Bindung so etwas wie die folgenden sein:

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

Jede Hilfe ist willkommen.

Vielen Dank

War es hilfreich?

Lösung 2

Fixed!

Am Anfang habe ich versucht, dies zu tun:

{Binding Path=MetaData+Sizes.Length1}

, das in Ordnung zusammengestellt, jedoch die Bindung zur Laufzeit scheiterte trotz der Klasse ‚Two‘ wird die Datacontext der Pfad nicht in die inneren statischen Klassen lösen könnte (könnte ich getan habe, so etwas wie: {Binding Path = {x: Statische MetaData + Size.Length1}}?)

hatte ich mit dem Layout meiner Klassen Geige ein wenig, aber die Bindung jetzt arbeiten.

Neue Klassenstruktur:

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; }
        }
    }
}

Dann meine verbindliche Anweisung lautet wie folgt:

xmlns:local="clr-namespace:Blah"

und

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

Welche scheint ok zu arbeiten. Ich bin nicht sicher, ob die Konstanten in Eigenschaften umgewandelt werden benötigt, aber es scheint nicht so dabei Schaden zu sein.

Danke allen für Ihre Hilfe!

Andere Tipps

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

Perioden Referenzobjekte. Pluszeichen beziehen sich auf innere Klassen.

versuchen, mit x zu binden: Statisch. fügen Sie ein xmlns: local Namespace mit dem Namensraum von Größen zu XAML-Header und binden dann mit so etwas wie folgt aus:

{x:Static local:Sizes.Length1}

Leider mit folgenden erhalte ich die Fehler Type 'One.Two.MetaData.Sizes' not found. Ich kann nicht einen lokalen Namensraum tiefer als „Blah“ schaffen (auch nach VS2008 sowieso)

xmlns:local="clr-namespace:Blah"

und

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

Wenn man nicht eine statische Klasse ist man nicht, um es mit x binden kann: Statisch. warum mit inneren Klassen? wenn Metadaten außerhalb von zwei ist, und Größen ist eine Eigenschaft, können Sie es leicht mit x Zugang: Statisch. Sie können nicht auf Typen in diesem Fall binden, nur für bestehende Objekte. aber eins und zwei sind Typen, keine Objekte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top