Buscando un WPF ComboBox con casillas de verificación
checkedlistbox (3)
Hay mi combobox. Uso el código y el código de Martin Harris desde este enlace. ¿Puede un WPF ComboBox mostrar texto alternativo cuando su selección es nula?
<ComboBox Name="cbObjects" Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="2,2,6,0" SelectionChanged="OnCbObjectsSelectionChanged" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}" Width="20" VerticalAlignment="Center" Checked="OnCbObjectCheckBoxChecked" Unchecked="OnCbObjectCheckBoxChecked" />
<TextBlock Text="{Binding ObjectData}" VerticalAlignment="Center" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock IsHitTestVisible="False" Name="tbObjects" Text="Выберите объекты..." Grid.Column="1" Grid.Row="1" VerticalAlignment="Center" Margin="6,2,6,0" />
Clase pequeña para el origen de datos:
public class SelectableObject <T> {
public bool IsSelected { get; set; }
public T ObjectData { get; set; }
public SelectableObject(T objectData) {
ObjectData = objectData;
}
public SelectableObject(T objectData, bool isSelected) {
IsSelected = isSelected;
ObjectData = objectData;
}
}
Y hay dos controladores: uno para hacer clic en CheckBox y otro para formar Text for ComboBox.
private void OnCbObjectCheckBoxChecked(object sender, RoutedEventArgs e) {
StringBuilder sb = new StringBuilder();
foreach (SelectableObject<tblObject> cbObject in cbObjects.Items)
if (cbObject.IsSelected)
sb.AppendFormat("{0}, ", cbObject.ObjectData.Description);
tbObjects.Text = sb.ToString().Trim().TrimEnd('','');
}
private void OnCbObjectsSelectionChanged(object sender, SelectionChangedEventArgs e) {
ComboBox comboBox = (ComboBox)sender;
comboBox.SelectedItem = null;
}
Para ComboBox.ItemsSource que uso
ObservableCollection<SelectableObject<tblObject>>
donde tblObject es el tipo de mi objeto, una lista de la cual quiero mostrar en ComboBox.
¡Espero que este código sea útil para alguien!
Mis habilidades de Google me fallan. Alguien ha oído hablar de un control como ese para WPF. Estoy tratando de que se vea así (captura de pantalla de winforms).
Pruebe con CheckComboBox desde Extended WPF Toolkit . La principal ventaja para mí es tener dos listas para el enlace:
- todos los artículos disponibles para la selección
- solo elementos seleccionados
Encuentro este enfoque más práctico. Además, puede especificar el value
y display
miembros de las colecciones que está vinculando.
Si no quiere traer CheckComboBox
otros controles con CheckComboBox
, puede obtener el código fuente del mismo, es bastante sencillo (necesita traer la clase Selector también).
Puede hacerlo usted mismo configurando DataTemplate del cuadro combinado. Este artículo muestra cómo, para un cuadro de lista, pero el principio es el mismo.
Otro artículo here es quizás una mejor opción para lo que estás tratando de hacer, simplemente establece la primera columna de la plantilla del artículo para que sea una casilla de verificación y vincúlala a un bool en tu objeto comercial.
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding DayOfWeek}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>