13 messaggi dal 11 novembre 2014
Ciao a tutti, ho un problema che mi attanaglia. Sono nuovo alla programmazione per windows phone 8.1 e sto apprendendo i fondametali dello xaml. Ora, a scopo puramente didattico, vorrei poter "bindare" la visibilità di uno stackpanel alla proprietà IsChecked di un RadioButton. Avrei voluto farlo direttamente dallo xaml senza dover ricorrere al code-behind ma da quanto ho potuto capire cercano in rete non è possibile. Inoltre, per un motivo o per l'altro, pur ricorrendo al code-behind nessuna delle soluzioni proposte in rete funziona. Forse sbaglio metodologie di ricerca...Qualcuno saprebbe illuminarmi a riguardo?
Modificato da candylime il 25 novembre 2014 22.21 -
Modificato da candylime il 25 novembre 2014 22.21 -
Modificato da candylime il 25 novembre 2014 22.22 -
37 messaggi dal 16 giugno 2011
Contributi
Ciao,

IsChecked è una proprietà che accetta valori booleani quindi true/false, mentre la visibilità di uno StackPanel è di tipo Visibility quindi capisci bene che i tipi essendo diversi sono sono bindabili direttamente.

Il fatto che non sono bindabili direttamente implica l'uso di un converter, quindi di una classe che prenda il valore che stai mettendo in binding e lo converta al valore corretto.

Avrai quindi bisogno di un converter VisibilityToBoolean tipo questo:

public class VisibilityToBooleanConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (Visibility)value.Visible ? true : false;
        }

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


In questo modo se la proprietà in binding è Visible allora ritornerà true per il RadioButton, altrimenti ritornerà false e quindi il pulsante avrà IsChecked a false.

Per usare questo converter non dovrai fare altro che dichiararlo nell'App.xaml oppure come risorsa della pagina e poi usarlo in questo modo:

<RadioButton 
    IsChecked="{Binding ElementName=MyStackPanel, Path=Visibility, Converter={StaticResource VisibilityToBooleanConverter}}"/>



Il codice l'ho scritto a mano senza Visual Studio, quindi non sono certo sia corretto al 100% come sintassi ma la logica è questa. Spero di essere stato utile.
13 messaggi dal 11 novembre 2014
Ciao xTuMiOx, grazie per il supporto. Mi sono accorto dopo il post del fatto che la proprietà visibility non accetta valori boleani quindi mi rendo conto che il bind richiede una conversione a monte. In serata seguirò le tue istruzioni e posterò il risultato. Grazie
13 messaggi dal 11 novembre 2014
risolto a meraviglia, grazie!
in realtà volevo fare il contrario cioè bindare la visibilità dello stackpanel al valore (convertito in Visibility) della proprietà IsChecked di un radiobutton.
In ogni caso grazie al tuo codice ce l'ho fatta. Ho fatto una correzione nel valore di ritorno del metodo Convert. spero di non aver fatto scempio del tuo codice.

grazie ancora

public BooleanToVisibilityConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}



XAML:

<Page.Resources>
<local:BooleanToVisibilityConverter x:Key="vbc" />
</Page.Resources>

<RadioButton x:Name="radioData" Content="data" />

<StackPanel Visibility="{Binding ElementName=radioData, Path=IsChecked, Converter={StaticResource vbc}}">




Modificato da candylime il 26 novembre 2014 22.16 -
Modificato da candylime il 26 novembre 2014 22.18 -
Modificato da candylime il 26 novembre 2014 22.18 -
Modificato da candylime il 26 novembre 2014 22.21 -
Modificato da candylime il 27 novembre 2014 19.51 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.