View Full Version : [WPF] Eseguire il BIND di un Enumerativo in una Combobox
robertino_salemi
19-02-2015, 18:06
Hi,
I have this enum type:
public enum SchedActiveEnum
{
[Description("All")]
All,
[Description("Y")]
Y,
[Description("N")]
N
}
Qual è il modo migliore per eseguire il bind in una combobox?
Vorrei visualizzare la description ma ricevere il valore.
Grazie.
robertino_salemi
20-02-2015, 16:03
Risolto tramite l'utilizzo di un dizionario:
private Dictionary<Definition.SchedActiveEnum, string> _schedActive;
public Dictionary<Definition.SchedActiveEnum, string> SchedActive
{
get
{
if (_schedActive == null)
{
_schedActive = new Dictionary<Definition.SchedActiveEnum, string>();
var myList = Enum.GetValues(typeof(Definition.SchedActiveEnum)).Cast<Enum>().Select(value => new
{
value,
(Attribute.GetCustomAttribute(
value.GetType().GetField(value.ToString()),
typeof(DescriptionAttribute)) as DescriptionAttribute).Description
}
);
foreach (var item in myList)
{
_schedActive.Add((Definition.SchedActiveEnum)item.value, item.Description);
}
}
return _schedActive;
}
}
nello xaml ho eseguito il Bind:
<ComboBox Name="cmbActive"
DataContext="{StaticResource DomainDataViewModel}"
ItemsSource="{Binding SchedActive}"
DisplayMemberPath="Value"
SelectedValuePath="Key"
Width="50">
dove DataContext è il mio ViewModel.
L'unico problema: dalla cambo ricevo il valore della Description e non la Key del dizionario, come mai?
Grazie.
Anziché usare un dizionario, prova a dare un'occhiata ai ValueConverter. Fanno esattamente quello che serve a te, permettendoti di passare alla ComboBox l'oggetto che del tuo dominio e di avere un metodo per effettuare la conversione nella sua rappresentazione testuale.
https://social.msdn.microsoft.com/Forums/vstudio/en-US/43db6b07-f886-4214-8076-5a5ec2360616/valueconverter-that-converts-an-enum-value-to-its-corresponding-string-value?forum=wpf
robertino_salemi
23-02-2015, 10:10
Anziché usare un dizionario, prova a dare un'occhiata ai ValueConverter. Fanno esattamente quello che serve a te, permettendoti di passare alla ComboBox l'oggetto che del tuo dominio e di avere un metodo per effettuare la conversione nella sua rappresentazione testuale.
https://social.msdn.microsoft.com/Forums/vstudio/en-US/43db6b07-f886-4214-8076-5a5ec2360616/valueconverter-that-converts-an-enum-value-to-its-corresponding-string-value?forum=wpf
Effettivamente avevo pensato a questa soluzione, poi però ho risolto sempre con il dizionario:
private Dictionary<Definition.SchedActiveEnum, string> _schedActive;
public Dictionary<Definition.SchedActiveEnum, string> SchedActive
{
get
{
if (_schedActive == null)
{
_schedActive = new Dictionary<Definition.SchedActiveEnum, string>();
//Permette di visualizzare la Description dell'Enum
var myList = Enum.GetValues(typeof(Definition.SchedActiveEnum)).Cast<Enum>().Select(value => new
{
value,
(Attribute.GetCustomAttribute(
value.GetType().GetField(value.ToString()),
typeof(DescriptionAttribute)) as DescriptionAttribute).Description
}
);
foreach (var item in myList)
{
_schedActive.Add((Definition.SchedActiveEnum)item.value, item.Description);
}
}
return _schedActive;
}
}
nello xaml:
<ComboBox Name="cmbActive"
DataContext="{StaticResource DomainDataViewModel}"
ItemsSource="{Binding SchedActive}"
DisplayMemberPath="Value"
SelectedValuePath="Key"
Width="50">
</ComboBox>
Grazie.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.