Je voudrais avoir une liste déroulante qui permet la sélection d'une liste de valeurs et permet également une valeur personnalisée à partir du texte tapé. Pour des raisons d'affichage, les éléments sont de type complexe (disons que le modèle d'élément de liste déroulante affiche un patch de couleur et un drapeau indiquant s'il s'agit d'une couleur personnalisée).Comment faire un WPF ComboBox modifiable avec des valeurs personnalisées
public class ColorLevel
{
public decimal Intensity { get; set; }
public bool IsCustom { get; set; }
public Color BaseColor { get; set; }
public override ToString() { return string.Format("{0}", Intensity*100); }
}
articles Exemple
var items = new [] {
new ColorLevel { Intensity = 0.9m, IsCustom = false, BaseColor = Color.Red },
new ColorLevel { Intensity = 0.7m, IsCustom = false, BaseColor = Color.Red }
}
XAML
<ComboBox SelectedItem="{Binding Path=SelectedColorLevel}"
IsEditable="true" IsTextSearchEnabled="true">
</ComboBox>
Ainsi, les travaux de balisage ci-dessus lorsqu'un élément est sélectionné dans la liste des éléments. Et lorsque vous tapez avec la recherche de texte, les éléments correspondants sont sélectionnés. Si le texte tapé ne correspond pas à un élément, alors SelectedColorLevel est défini sur null.
La question est à quel point (et comment) est-il préférable de créer un nouvel élément personnalisé qui peut être défini sur SelectedColorLevel lorsque le texte tapé ne correspond pas à un élément.
Par exemple je voudrais attribuer un nouvel élément à la valeur sélectionnée, comme
new ColorLevel { Intensity = decimal.Parse(textvalue), IsCustom = true }
ou en utilisant un convertisseur approprié et databinding à la propriété Text.