IfConverter Template Selector in Silverlight

In Silverlight non e’ possibile realizzare un template selector, mi e’ capitato il caso nel quale il template dell’ item da mostrare dipendeva da un valore booleano.

Per realizzare un soluzione riutilizzabile ho scritto un IfConverter

public class IfConverter : IValueConverter
    {
        public object TrueValue { get; set; }
        public object FalseValue { get; set; }

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            bool bValue = System.Convert.ToBoolean(value);

            if (bValue)
                return TrueValue;
            else
                return FalseValue;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

ecco il codice nella view (.xaml):

<UserControl.Resources>

<CNAColfBadanti_Code:IfConverter x:Key="IfConverter"
TrueValue="{StaticResource DataTemplateMioModelloEditing}"
FalseValue="{StaticResource DataTemplateMioModello}"/>

</UserControl.Resources>

.....

<ContentControl Content="{Binding MioModello}" ContentTemplate="{Binding MioModello.IsEditing, Converter={StaticResource IfConverter}}"  />

Viene creato il converter e vengono assegnati i valori (datatemplate) nel caso di true e nel caso di false, poi lo si utilizza in binding per scegliere l’ itemTemplate

Si potrebbe inserire questo contentControl all’ interno di un ItemTemplate di una ItemsControl, ottenendo un template selector degli item di una lista.

Nell’ esempio lo utilizzo appunto come template selector, ma essendo TrueValue e FalseValue proprieta’ di tipo Object e’ possibile utilizzarlo per qualsiasi caso richieda un if in xaml

Annunci

Informazioni su Andrea Regoli

Project Manager .Net Developer WPF WP7 Asp.Net c# javascript ajax SQL sharepoint
Questa voce è stata pubblicata in .Net, c#, Silverlight, WPF e contrassegnata con , , . Contrassegna il permalink.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...