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!