Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di exFelino
    Registrato dal
    Jul 2014
    residenza
    Aci Catena (CT)
    Messaggi
    710

    [WPF] Combobox and bind dinamico

    Ciao,
    nella mia applicazione WPF, sto usando delle combobox e come ItemsSource eseguo il bind di una collection letta dal database, vorrei:
    - eseguire un captalize dei vari item, qual è il modo migliore?
    - come impostare la larghezza della stessa lunghezza dell'item più lungo presente?


    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da exFelino Visualizza il messaggio
    Ciao,
    nella mia applicazione WPF, sto usando delle combobox e come ItemsSource eseguo il bind di una collection letta dal database, vorrei:
    - eseguire un captalize dei vari item, qual è il modo migliore?
    - come impostare la larghezza della stessa lunghezza dell'item più lungo presente?


    Grazie.
    Ciao
    Rispondo per il punto 1, cioè mettere tutti gli items in maiuscolo.
    Cercando un minimo su internet si trova: basta definire una classe che implementa IValueConverter
    Vedi soluzione n°2 qua:
    http://stackoverflow.com/questions/7...an-itemssource


  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it L'avatar di exFelino
    Registrato dal
    Jul 2014
    residenza
    Aci Catena (CT)
    Messaggi
    710
    Ciao,
    grazie della segnalazione.

    Per il primo punto ho usato la classse IValueConverter:
    codice:
    public class StringConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                SchedType obj = value as SchedType;
    
                string description = obj.Description;
    
                if (description == null)
                    return null;
    
                if (description.Length > 1)
                    return char.ToUpper(description[0]) + description.Substring(1);
    
                return description.ToUpper();
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    Per il secondo punto cerco una soluzione più "rapida"....

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da exFelino Visualizza il messaggio
    Ciao,
    grazie della segnalazione.

    Per il primo punto ho usato la classse IValueConverter:
    codice:
    public class StringConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                SchedType obj = value as SchedType;
    
                string description = obj.Description;
    
                if (description == null)
                    return null;
    
                if (description.Length > 1)
                    return char.ToUpper(description[0]) + description.Substring(1);
    
                return description.ToUpper();
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    Per il secondo punto cerco una soluzione più "rapida"....
    Per completezza, dovresti postare anche il codice XAML, dove usi il converter...

  6. #6
    Utente di HTML.it L'avatar di exFelino
    Registrato dal
    Jul 2014
    residenza
    Aci Catena (CT)
    Messaggi
    710
    Mi sono accorto che comunque non va, perchè nella combo viene riportato il valore modificato come da me desiderato con il captalize, ma se ne seleziono uno mi riporta il nome delll'object, come mai?

    Nello XAML ho:
    - definito il namespace
    codice:
    xmlns:localConvert="clr-namespace:MyAPP.Converters"
    - all'interno della combobox ho
    codice:
    <ComboBox Name="cmbTypeOfSchedule"
          DataContext="{StaticResource DomainDataViewModel}"  
          ItemsSource="{Binding SchedTypes}" 
          IsEditable="True" IsReadOnly="True" Text="{StaticResource menuCmbAll}">
    <ComboBox.Resources>
        <localConvert:StringConverterCapitalize x:Key="toCapitalize"/>
    </ComboBox.Resources>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Converter={StaticResource toCapitalize}}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
    </ComboBox>
    Come mai?

    Grazie.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da exFelino Visualizza il messaggio
    Mi sono accorto che comunque non va, perchè nella combo viene riportato il valore modificato come da me desiderato con il captalize, ma se ne seleziono uno mi riporta il nome delll'object, come mai?

    Nello XAML ho:
    - definito il namespace
    codice:
    xmlns:localConvert="clr-namespace:MyAPP.Converters"
    - all'interno della combobox ho
    codice:
    <ComboBox Name="cmbTypeOfSchedule"
          DataContext="{StaticResource DomainDataViewModel}"  
          ItemsSource="{Binding SchedTypes}" 
          IsEditable="True" IsReadOnly="True" Text="{StaticResource menuCmbAll}">
    <ComboBox.Resources>
        <localConvert:StringConverterCapitalize x:Key="toCapitalize"/>
    </ComboBox.Resources>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Converter={StaticResource toCapitalize}}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
    </ComboBox>
    Come mai?

    Grazie.
    Non sono un esperto di WPF.. Però nell'esempio che ti linkato, non quello con + voti ma quello sotto, la conversione veniva fatta in sede di binding sulla proprietà ItemsSource. Infatti il convertitore lavorava sulla lista di items, non sul singolo. In questo modo ritorna già la lista modificata. Prova a fare così.. altrimenti non saprei.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.