Domanda

Sto tentando di associare la proprietà Maxlength di una casella di testo WPF a una costante nota profonda all'interno di una classe. Sto usando c #.

La classe ha una struttura non troppo dissimile da quanto segue:

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

Sì, è profondamente annidato, ma sfortunatamente in questo caso non posso muovere molto le cose senza grandi riscritture richieste.

Speravo di poter associare la casella di testo MaxLength ai valori Lunghezza1 o Lunghezza2, ma non riesco a farlo funzionare.

Mi aspettavo che il binding fosse simile al seguente:

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

Qualsiasi aiuto è apprezzato.

Mille grazie

È stato utile?

Soluzione 2

fissi!

Inizialmente ho provato a farlo:

{Binding Path=MetaData+Sizes.Length1}

che ha compilato ok, tuttavia l'associazione non è riuscita in fase di esecuzione, nonostante la classe 'Due' sia il datacontext che il percorso non è riuscito a risolvere nelle classi statiche interne (avrei potuto fare qualcosa del tipo: {Binding Path = {x: Static MetaData + Size.Length1}}?)

Ho dovuto giocherellare un po 'con il layout delle mie lezioni, ma ora la rilegatura funziona.

Nuova struttura di classe:

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

Quindi la mia dichiarazione vincolante è la seguente:

xmlns:local="clr-namespace:Blah"

e

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

Che sembra funzionare bene. Non sono sicuro se le costanti debbano essere convertite o meno in proprietà, ma non sembra esserci alcun danno nel farlo.

Grazie a tutti per il vostro aiuto!

Altri suggerimenti

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

Proprietà di riferimento periodi. I segni più si riferiscono alle classi interne.

prova a legare con x: statico. aggiungi un xmlns: spazio dei nomi locale con lo spazio dei nomi delle dimensioni all'intestazione xaml e quindi associa a qualcosa del genere:

{x:Static local:Sizes.Length1}

Sfortunatamente, con quanto segue ottengo l'errore Digita 'One.Two.MetaData.Sizes' non trovato . Non riesco a creare uno spazio dei nomi locale più profondo di " Blah " (bene secondo VS2008 comunque)

xmlns:local="clr-namespace:Blah"

e

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

se One non è una classe statica non puoi associarla con x: Static. perché usare le classi interne? se i metadati sono al di fuori di due e Sizes è una proprietà, puoi accedervi facilmente con x: Static. in questo caso non è possibile associarsi ai tipi, ma solo agli oggetti esistenti. ma One e Two sono tipi, non oggetti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top