Wie zu verwenden MultiBinding in einer WPF ComboBox

Dies treibt mich NÜSSE!!!

Ich habe eine ComboBox verwendet werden zum filtern einer Abfrage nach Mitarbeiter, welche gut funktioniert, aber zeigt nur die Mitarbeiter Vorname. Ich möchte an einem MultiValueConverter - display, um die Mitarbeiter mit vollem Namen an (Dies wäre weniger dringend, wenn wir nicht schon 2 Mikrofonen und 2 Fremde)

Unten ist mein code arbeiten und die IMultiValueConverter Klasse (unnötige Formatierung herausgeschnitten aus Platzgründen). Ich habe alles versucht, ich kann mir zu Holen Sie sich die MultiConverter zu arbeiten, aber ich habe kein Glück gehabt.

<ComboBox ItemsSource="{Binding Path=EmployeesFilter}" 
                       DisplayMemberPath="EmpFirstName"
                       SelectedValue="{Binding Path=EmployeeToShow, Mode=TwoWay}"/>

Den ViewModel-Eigenschaften gebunden ist:

//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
        }
    }
}

Den 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; 
    }
}

Habe ich versucht, eine Menge verschiedener Dinge, aber im Grunde verwende die folgenden, in der ComboBox

<ComboBox.SelectedValue>
     <MultiBinding Converter="{StaticResource StringsToFullNameMultiConverter}" 
                   Mode="OneWay" > 
           <Binding Path="EmpFirstName" />
           <Binding Path="EmpLastName"/>
     </MultiBinding>
</ComboBox.SelectedValue>

Wie es jetzt steht, der Konverter wird aufgerufen, wenn das Programm initialisiert mit den Werten DependencyProperty.UnsetValue. danach ist es nie wieder genannt, selbst wenn Sie wählen Sie einen Namen aus der box. Die Namen werden noch angezeigt als ersten Namen.

Vielen Dank für jede Hilfe oder Verweise auf gute tutorials/Beispiele, die Sie bieten kann. Alle die, die ich immer wieder im web sind für Textfelder und ich kann Sie Prima den ganzen Tag.

InformationsquelleAutor Mike B | 2010-02-04

Schreibe einen Kommentar