Compartir a través de


BindingContext Clase

Definición

Clase auxiliar que se usa para asignar estructuras y clases a elementos de la interfaz de usuario en MonoTouch.Dialog.

public class BindingContext : IDisposable
type BindingContext = class
    interface IDisposable
Herencia
BindingContext
Implementaciones

Comentarios

La construcción del diálogo basado en reflexión se usa mediante la creación de un objeto de la clase MonoTouch.Dialog.BindingContext, el método toma tres parámetros: (1) Un objeto que se usará para resolver destinos tap, (2) El objeto que se editará y (3) un título para él.

La interfaz de usuario se construye en función del tipo del objeto que se está editando. El tipo puede contener objetos de los siguientes tipos: string, bool, enumerations, floats, integers, , DateTimeT:MonoTouch.UIKit.UIImage y estos se pueden decorar aún más con un puñado de atributos que impulsan la generación de la interfaz de usuario.

Aquí se muestra un cuadro de diálogo muy sencillo que contiene una casilla:

class Settings {
    public bool AirplaneMode;
}

El anterior generará una página que contiene un solo elemento con el título "Modo avión" y un interruptor de encendido y apagado. El título se calcula en función del nombre del campo. En este caso, "AirplaneMode" se convierte en "Modo avión". MonoTouch.Dialogs admite otras convenciones, por lo que "AirplaneMode", "airplaneMode" y "airplane_mode" generan el mismo título "Modo avión".

Si necesita controlar el título real (por ejemplo, para incluir caracteres especiales, use una ortografía diferente o esté reutilizando una clase existente), solo tiene que adjuntar el atributo [Caption] a la variable, como se indica a continuación:

[Caption ("Your name is:")]
string userName;

El contenido del cuadro de diálogo se representa en el mismo orden en que los campos se declaran en la clase . Puede usar el atributo [Section] para agrupar la información de las secciones que tienen sentido. Puede usar el atributo [Section] de varias maneras:

[Section]

Esto crea una nueva sección, sin encabezados ni pies de página.

[Section (header)]

>> Crea una nueva sección, con el encabezado especificado y sin pie de página.

[Section (header, footer)]

>> Crea una nueva sección con el encabezado y pie de página especificados.

Estos son los widgets actuales admitidos por Reflection API:

Constantes y botones de cadena.

Use el tipo de cadena. Si el tipo tiene un valor, además de mostrar el título, representará su valor a la derecha.

Puede agregar el atributo [OnTap] a la cadena para invocar un método a petición.

Puede agregar el atributo [Multiline] a la cadena para que la celda se represente en varias líneas. Y puede usar el atributo [Html] en una cadena, en ese caso, el valor de la cadena debe contener la dirección URL que se va a cargar en la uiWebView incrustada.

El atributo [Aligntment] toma un parámetro UITextAlingment que determina cómo se debe representar la cadena.

Ejemplos:

public string Version = "1.2.3";

[OnTap ("Login")]
public string Login;

[Caption ("(C) FooBar, Inc")]
string copyright;

[Caption ("This is a\nmultiline caption")]
[Multiline]
string multiline;

[Caption ("Date")]
[Alignment (UITextAlignment.Center)]
string centered;

Entrada de texto y Entradas de contraseña.

Use el tipo de cadena para el campo y anote la cadena con el atributo [Entry]. Si proporciona un argumento al atributo [Entry], se usará como el valor de marcador de posición atenuado para UITextField.

Use el atributo [Password] en lugar de [Entry] para crear una línea de entrada segura.

Ejemplos:


[Entry ("Your username")]
public string Login;

[Entry]
public string StreetName;

[Password, Caption ("Password")]
public string passwd;

También puede especificar el marcador de posición y el tipo de teclado que se usarán en la entrada mediante algunos de los atributos Entry:

[Entry (KeyboardType=UIKeyboardType.NumberPad,Placeholder="Your Zip code")]
public string ZipCode;

Interruptores activados y desactivados

Use un valor bool para almacenar una configuración de encendido/apagado, de forma predeterminada obtendrá un conmutador Activado/Desactivado, pero puede cambiar este comportamiento para mostrar una casilla en su lugar mediante el atributo [Checkbox]:

Ejemplos:

bool OnOffSwitch;

[Checkbox]
bool ReadyToRun;

Valores flotantes

El uso de un valor float en el origen proporcionará un control deslizante en la pantalla. Puede controlar los intervalos de los valores mediante el atributo [Range (low,high)]. De lo contrario, el valor predeterminado es editar un valor entre 0 y 1.

Ejemplos:

float brightness;

[Range (0, 10), Caption ("Grade")]
float studentGrade;

Edición de fechas

Use un objeto "DateTime" en la clase para presentar un selector de fechas.

De forma predeterminada, esto proporcionará un editor de fecha y hora, si solo desea editar la fecha, establezca el atributo [Date] si solo desea editar la hora, establezca el atributo [Time]:

Ejemplos:


[Date]
DateTime birthday;

[Time]
DateTime alarm;

[Caption ("Meeting Time")]
DateTime meetingTime;

Valor de enumeración

Monotouch.Dialogs convertirá automáticamente una enumeración en una selección de radio. Simplemente especifique la enumeración en el archivo:

Ejemplos:

enum SeatPreference { Window, Aisle, MiddleSeat }

[Caption ("Seat Preference")]
SeatPreference seat;

Imágenes

Las variables con tipo UIImage representarán la imagen como una miniatura e invocarán el selector de imágenes si se pulsan.

Ejemplos:

UIImage ProfilePicture;

Omitir algunos campos

Si desea omitir un campo determinado, simplemente aplique el atributo [Skip] al campo.

Ejemplos:

[Skip] Guid UniquId;

Cuadros de diálogo anidados

Para crear diálogos anidados simplemente usen una clase anidada, el enlazador de reflexión creará los bits de navegación necesarios en función del modelo de contenedor.

El valor de un cuadro de diálogo anidado no debe ser NULL.

Ejemplos:

class MainSettings {
    string Subject;
    string RoomName;
    TimeRange Time;
}

class TimeRange {
    [Time] DateTime Start;
    [Time] DateTime End;
}

Para inicializar:


new MainSettings () {
    Subject = "Review designs",
    RoomName = "Conference Room II",
    Time = new TimeRange {
        Start = DateTime.Now,
	End   = DateTime.Now
           }
       }

IEnumerable como origen de radio

Puede usar cualquier tipo que implemente IEnumerable, incluidos los genéricos (que implementan IEnumerable) como origen de valores para crear un selector de uno de varios, similar a la selección de tipo radio que se obtiene de una enumeración.

Para usarlo, necesitará un valor int que tenga establecido el atributo [RadioSelection] para contener el valor que se seleccionará en el inicio y que también contendrá el nuevo valor cuando haya terminado.

Por ejemplo:

       class MainSettings {
    [RadioSelection ("Themes")]
    public int CurrentTheme;
    public IList<string> Themes;
}

El valor representado es el valor representado llamando a ToString() en el valor devuelto por IEnumerable.

Crear un cuadro de diálogo a partir del objeto

Una vez que haya creado la clase con los atributos adecuados, cree un contexto de enlace, de la siguiente manera:

BindingContext context;

public void Setup ()
{
    // Create the binder.
    context = new BindingContext (this, data, "Settings");

    // Create our UI
    // Pass our UI (context.Root) and request animation (true)
    var viewController = new DialogViewController (context.Root, true);

    navigation.PushViewController (viewController, true);
}

Esto representará la información. Para recuperar los valores después de editar, debe llamar al contexto. Capturar (). Puede hacerlo desde su controlador favorito y, en ese momento, también puede llamar al contexto. Dispose() para ayudar al GC a liberar los recursos de gran tamaño que podría haber mantenido.

Constructores

BindingContext(Object, Object, String)

Crea un contexto de enlace con los parámetros especificados.

Campos

Root

RootElement generado que se puede pasar a un DialogViewController.

Métodos

Dispose()
Dispose(Boolean)
Fetch()

Recupera los datos editados por el usuario y los almacena de nuevo en el objeto original que se pasó a BindingContext.

Se aplica a