¡Esto me está impulsando NUTS!Cómo usar MultiBinding en un WPF ComboBox
Tengo un ComboBox
utilizado para filtrar una consulta por empleado que funciona bien pero solo muestra el nombre del empleado. Quiero usar un MultiValueConverter
para mostrar la empleados nombre completo (Este sería menos urgente si no teníamos 2 micrófonos y 2 Daves)
A continuación se muestra el código de trabajo y de la Clase IMultiValueConverter
(con el formato innecesaria recortado a cabo por razones de brevedad) He intentado todo lo que se me ocurre para hacer funcionar el MultiConverter, pero no he tenido suerte.
<ComboBox ItemsSource="{Binding Path=EmployeesFilter}"
DisplayMemberPath="EmpFirstName"
SelectedValue="{Binding Path=EmployeeToShow, Mode=TwoWay}"/>
Las Propiedades ViewModel que está obligado a:
// This collection is used to populate the Employee Filter ComboBox
private ObservableCollection<Employee> employeesFilter;
public ObservableCollection<Employee> EmployeesFilter
{
get {
return employeesFilter;
}
set {
if (employeesFilter != value)
{
employeesFilter = value;
OnPropertyChanged("EmployeesFilter");
}
}
}
// This property is TwoWay bound to the EmployeeFilters SelectedValue
private Employee employeeToShow;
public Employee EmployeeToShow
{
get {
return employeeToShow;
}
set {
if (employeeToShow != value)
{
employeeToShow = value;
OnPropertyChanged("EmployeeToShow");
QueryIssues(); // Requery with new employee filter
}
}
}
El IMultiValueConverter:
class StringsToFullNameMultiConverter : IMultiValueConverter
{
public object Convert(object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
// I added this because I kept getting DependecyProperty.UnsetValue
// Passed in as the program initializes
if (values[0] as string != null)
{
string firstName = (string)values[0];
string lastName = (string)values[1];
string fullName = firstName + " " + lastName;
return fullName;
}
return null;
}
public object[] ConvertBack(object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
return null;
}
}
He intentado un montón de cosas diferentes, pero básicamente estoy usando lo siguiente en el cuadro combinado
<ComboBox.SelectedValue>
<MultiBinding Converter="{StaticResource StringsToFullNameMultiConverter}"
Mode="OneWay" >
<Binding Path="EmpFirstName" />
<Binding Path="EmpLastName"/>
</MultiBinding>
</ComboBox.SelectedValue>
Tal como está ahora, se llama al convertidor cuando el programa se inicializa con los valores establecidos en DependencyProperty.UnsetValue
. después de eso nunca se llama nuevamente, incluso cuando selecciona un nombre del cuadro. Los nombres todavía se muestran como un primer nombre.
Gracias por cualquier ayuda o consejos para buenos tutoriales/muestras que puede proporcionar. Todos los que sigo encontrando en la web son para cuadros de texto y puedo usarlos bien todo el día.
Curiosamente, esto funciona pero el xaml aparece resaltado con un error, el error dice "Propiedad 'Texto' no admite valores de tipo 'Enlace múltiple'." ¡Estoy seguro de que será una solución fácil, pero lo dejo hasta la mañana, ya que mi verdadero problema está resuelto! Muchas gracias por la ayuda, ODIO irme a la cama con un misterio sin resolver para mantenerme despierto –
Por cierto, ¡el código que tiene para formatear sin un convertidor funciona perfectamente tal como es! –
Eso es un error extraño. Aunque suena como si fuera un insecto inofensivo para la sidra. – Josh