XAML: lunghezza massima della casella di testo vincolante alla costante di classe
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
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.