2009-03-26 14 views
10

Tengo un formulario de entrada XAML que rellena el usuario.¿Cómo acceder dinámicamente a los nombres de los elementos en XAML?

Quiero validar este formulario.

Tengo la información de campo en una colección que quiero recorrer y verificar cada campo.

Pero, ¿cómo puedo acceder al nombre del campo cuando está en una cadena, , p. when fieldInformation.FieldName = "CompanyName" Quiero verificar "Field_CompanyName.Text".

Pseudocódigo:

foreach (var fieldInformation in _fieldInformations) 
{ 
    if (Field_{&fieldInformation.FieldName}.Text.Length > 2) 
    { 
     ErrorMessage.Text = String.Format("The length of {0} is too long, please correct.", fieldInformation.FieldName); 
     entryIsValid = false; 
    } 
} 

XAML:

<StackPanel Orientation="Horizontal" Margin="10 10 10 0"> 
    <TextBlock Width="150" Text="Customer ID:"/> 
    <TextBox x:Name="Field_CustomerID" Width="150" MaxLength="5" Text=""/> 
</StackPanel> 
<StackPanel Orientation="Horizontal" Margin="10 10 10 0"> 
    <TextBlock Width="150" Text="Company Name:"/> 
    <TextBox x:Name="Field_CompanyName" Width="150" MaxLength="40" Text=""/> 
</StackPanel> 
<StackPanel Orientation="Horizontal" Margin="10 10 10 0"> 
    <TextBlock Width="150" Text="Contact Name:"/> 
    <TextBox x:Name="Field_ContactName" Width="150" MaxLength="30" Text=""/> 
</StackPanel> 

de código subyacente:

_fieldInformations.Add(new FieldInformation { FieldName = "CustomerID", FieldSize = 5 }); 
_fieldInformations.Add(new FieldInformation { FieldName = "CompanyName", FieldSize = 40 }); 
_fieldInformations.Add(new FieldInformation { FieldName = "ContactName", FieldSize = 30 }); 

Respuesta

37

¿No es sólo una llamada FindName en ti código detrás archivo o ¿Me estoy perdiendo de algo?

TextBox fieldTB = (TextBox)this.FindName("Field_CompanyName"); 
+0

Trabajando. Gracias – deanpodgornik

6

Además, si usted está dispuesto a añadir elementos de la interfaz de código subyacente que tendrá que utilizar la llamada RegisterName("Field_CompanyName", some_instance) método FindName funciona por defecto sólo para elementos declarados en XAML.

Cuestiones relacionadas