visual validar restringir longitud como caracteres cantidad bunifu agrandar xaml binding textbox constants maxlength

xaml - restringir - validar cantidad de caracteres textbox c#



XAML: vinculaciĆ³n textbox maxlength a constante de clase (5)

Estoy intentando vincular la propiedad Maxlength de un cuadro de texto de WPF a una profundidad constante conocida dentro de una clase. Estoy usando c #.

La clase tiene una estructura no muy diferente a la siguiente:

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í, está profundamente anidado, pero desafortunadamente en este caso no puedo mover las cosas mucho sin grandes reescrituras necesarias.

Esperaba poder enlazar el cuadro de texto MaxLength con los valores Length1 o Length2 pero no puedo hacerlo funcionar.

Esperaba que el enlace fuera algo como lo siguiente:

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

Cualquier ayuda es apreciada.

Muchas gracias


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

Periodos de propiedades de referencia. Los signos más se refieren a las clases internas.


Desafortunadamente, con el siguiente Type ''One.Two.MetaData.Sizes'' not found el error Type ''One.Two.MetaData.Sizes'' not found . No puedo crear un espacio de nombres local más profundo que "Blah" (bueno, de acuerdo con VS2008 de todos modos)

xmlns:local="clr-namespace:Blah"

y

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


Intenta ligar con x: Estático. agregue un espacio de nombres xmlns: local con el espacio de nombres de Tamaños en su encabezado xaml y luego vincule con algo como esto:

{x:Static local:Sizes.Length1}


si One no es una clase estática, no puede vincularse a ella con x: Static. ¿por qué usar clases internas? si los metadatos están fuera de dos y Sizes es una propiedad, puede acceder fácilmente con x: Static. no puede vincularse a tipos en este caso, solo a objetos existentes. pero Uno y Dos son tipos, no objetos.


¡Fijo!

Inicialmente intenté hacer esto:

{Binding Path=MetaData+Sizes.Length1}

compiló bien, pero el enlace falló en tiempo de ejecución, a pesar de que la Clase ''Dos'' era el contexto de datos que la ruta no podía resolver en las clases estáticas internas (¿podría haber hecho algo como: {Binding Path = {x: Static MetaData + Size .Length1}}?)

Tuve que jugar un poco con el diseño de mis clases pero el enlace ahora está funcionando.

Nueva estructura de clase:

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

Entonces mi declaración vinculante es la siguiente:

xmlns:local="clr-namespace:Blah"

y

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

Lo cual parece funcionar bien. No estoy seguro de si las constantes deben o no convertirse en propiedades, pero no parece haber ningún daño al hacerlo.

¡Gracias a todos por su ayuda!