Đây là lái xe cho tôi NUTS !!!Làm thế nào để sử dụng MultiBinding trong một ComboBox WPF
Tôi có một ComboBox
được sử dụng để lọc truy vấn của nhân viên hoạt động tốt nhưng chỉ hiển thị tên nhân viên. Tôi muốn sử dụng số MultiValueConverter
để hiển thị tên đầy đủ của nhân viên (Điều này sẽ ít khẩn cấp hơn nếu chúng tôi không có 2 Mikes và 2 Daves)
Dưới đây là mã làm việc của tôi và IMultiValueConverter
Lớp (Với định dạng không cần thiết được cắt ngắn để ngắn gọn). Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến để có được MultiConverter để làm việc nhưng tôi đã không có may mắn.
<ComboBox ItemsSource="{Binding Path=EmployeesFilter}"
DisplayMemberPath="EmpFirstName"
SelectedValue="{Binding Path=EmployeeToShow, Mode=TwoWay}"/>
ViewModel Thuộc tính nó là ràng buộc để:
// 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
}
}
}
Các 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;
}
}
tôi đã cố gắng rất nhiều thứ khác nhau nhưng về cơ bản đang sử dụng sau trong ComboBox
<ComboBox.SelectedValue>
<MultiBinding Converter="{StaticResource StringsToFullNameMultiConverter}"
Mode="OneWay" >
<Binding Path="EmpFirstName" />
<Binding Path="EmpLastName"/>
</MultiBinding>
</ComboBox.SelectedValue>
Hiện tại, trình biến đổi được gọi khi chương trình khởi tạo với các giá trị được đặt thành DependencyProperty.UnsetValue
. sau đó nó không bao giờ được gọi lại, ngay cả khi bạn chọn một tên từ hộp. Tên vẫn được hiển thị dưới dạng tên.
Cảm ơn bạn đã giúp đỡ hoặc gợi ý đến các hướng dẫn/mẫu tốt mà bạn có thể cung cấp. Tất cả những gì tôi tiếp tục tìm kiếm trên web đều dành cho hộp văn bản và tôi có thể sử dụng chúng một cách tốt đẹp cả ngày.
Rất tiếc công việc này nhưng xaml bị đánh dấu sai, lỗi đọc "Thuộc tính 'văn bản' không hỗ trợ giá trị loại 'MultiBinding'." Tôi chắc chắn nó sẽ là một sửa chữa dễ dàng nhưng tôi để nó cho đến khi buổi sáng kể từ khi vấn đề thực sự của tôi được giải quyết! Cảm ơn rất nhiều vì sự giúp đỡ, tôi HATE đi ngủ với một bí ẩn chưa được giải quyết để giữ cho tôi tỉnh táo –
Nhân đây, Mã bạn có để định dạng mà không có một công cụ chuyển đổi hoạt động hoàn hảo như nó được! –
Đó là một lỗi lạ. Nghe có vẻ như nó chỉ là một lỗi Cider vô hại. – Josh