Dies treibt mich NUTS !!!So verwenden Sie MultiBinding in einer WPF ComboBox
Ich habe eine ComboBox
verwendet, um eine Abfrage nach Mitarbeiter zu filtern, die gut funktioniert, aber nur den Vornamen der Mitarbeiter anzeigt. Ich möchte ein MultiValueConverter
verwenden, um den Mitarbeitern vollständigen Namen angezeigt werden (Dies wäre weniger dringlich, wenn wir nicht 2 Mikes hatte und 2 Daves)
Unten ist mein Arbeitscode und die IMultiValueConverter
Klasse (mit unnötigen Formatierung der Kürze halber getrimmt). Ich habe alles versucht, was mir einfällt, um den MultiConverter zum Laufen zu bringen, aber ich hatte kein Glück.
// 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
}
}
}
The IMultiValueConverter:
<ComboBox ItemsSource="{Binding Path=EmployeesFilter}"
DisplayMemberPath="EmpFirstName"
SelectedValue="{Binding Path=EmployeeToShow, Mode=TwoWay}"/>
Die Ansichtsmodell Eigenschaften ist es gebunden
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;
}
}
Ich habe versucht, im Grunde eine Menge verschiedener Dinge, aber die folgenden in der ComboBox
bin mit<ComboBox.SelectedValue>
<MultiBinding Converter="{StaticResource StringsToFullNameMultiConverter}"
Mode="OneWay" >
<Binding Path="EmpFirstName" />
<Binding Path="EmpLastName"/>
</MultiBinding>
</ComboBox.SelectedValue>
Der Konverter wird jetzt aufgerufen, wenn das Programm mit den auf DependencyProperty.UnsetValue
eingestellten Werten initialisiert wird. danach wird es nie wieder aufgerufen, auch wenn Sie einen Namen aus der Box auswählen. Die Namen werden weiterhin als Vorname angezeigt.
Danke für jede Hilfe oder Hinweise auf gute Tutorials/Beispiele, die Sie zur Verfügung stellen können. Alle, die ich im Internet finde, sind für Textboxen und ich kann sie den ganzen Tag gut gebrauchen.
Seltsamerweise funktioniert das aber die Xaml ist mit einem Fehler highlited, der Fehler lautet "Eigenschaft 'Text' unterstützt keine Werte vom Typ 'MultiBinding'." Ich bin mir sicher, dass es eine einfache Lösung sein wird, aber ich verlasse es bis zum Morgen, seit mein wirkliches Problem gelöst ist! Vielen Dank für die Hilfe, ich HATE ins Bett mit einem ungelösten Geheimnis, um mich wach zu halten –
Übrigens, der Code, den Sie für die Formatierung ohne Konverter haben, funktioniert perfekt, wie es ist! –
Das ist ein seltsamer Fehler. Hört sich an, als wäre es nur ein harmloser Cider-Fehler. – Josh