Это водит меня NUTS !!!Как использовать MultiBinding в WPF ComboBox
У меня есть ComboBox
, используемый для фильтрации запроса сотрудником, который отлично работает, но отображает только имя сотрудника. Я хочу использовать MultiValueConverter
для отображения сотрудников полного имени (Это будет менее актуальным, если у нас не было 2 микрофонов и 2 DAVES)
Ниже мой рабочий код и IMultiValueConverter
класса (с ненужными форматировании отделаны за краткости). Я пробовал все, что мог придумать, чтобы заставить MultiConverter работать, но мне не повезло.
<ComboBox ItemsSource="{Binding Path=EmployeesFilter}"
DisplayMemberPath="EmpFirstName"
SelectedValue="{Binding Path=EmployeeToShow, Mode=TwoWay}"/>
модели представления свойств он обязан:
// 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:
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;
}
}
Я пробовал много разных вещей, но в основном я использую следующие в ComboBox
<ComboBox.SelectedValue>
<MultiBinding Converter="{StaticResource StringsToFullNameMultiConverter}"
Mode="OneWay" >
<Binding Path="EmpFirstName" />
<Binding Path="EmpLastName"/>
</MultiBinding>
</ComboBox.SelectedValue>
В настоящее время преобразователь вызывается, когда программа инициализируется со значениями, установленными на DependencyProperty.UnsetValue
. после этого он никогда не вызывается снова, даже если вы выберете имя из окна. Имена все еще отображаются как имя.
Спасибо за любую помощь или указатели за хорошие учебники/образцы, которые вы можете предоставить. Все те, что я продолжаю находить в Интернете, предназначены для текстовых полей, и я могу использовать их в течение всего дня.
Как ни странно это работает, но xaml с высокой частотой с ошибкой, ошибка читает «Свойство« Текст »не поддерживает значения типа« MultiBinding ».» Я уверен, что это будет легко исправить, но я оставляю его до утра, так как моя реальная проблема решена! Большое спасибо за помощь, я НЕНАВИЖУ ложиться спать с неразгаданной тайной, чтобы не спать. –
Кстати, код, который у вас есть для форматирования без конвертера, отлично работает, как есть! –
Это странная ошибка. Похоже, это может быть просто безвредная ошибка Сидра. – Josh