Bu beni NUTS sürüyor!Bir WPF ComboBox'ta MultiBinding nasıl kullanılır
Çalışanların sorgusunu filtrelemek için kullanılan ancak yalnızca çalışanların adlarını yalnızca görüntüleyen ComboBox
numaralı bir makinem var. Ben çalışanları tam adını görüntülemek için bir MultiValueConverter
kullanmak istiyorum Aşağıda
IMultiValueConverter
Sınıf edilir (biz 2 Mikes ve 2 Daves yoktu, bu daha az acil olurdu)). MultiConverter'i işe almak için aklıma gelen her şeyi denedim ama şansım olmadı.
// 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
}
}
}
IMultiValueConverter:
<ComboBox ItemsSource="{Binding Path=EmployeesFilter}"
DisplayMemberPath="EmpFirstName"
SelectedValue="{Binding Path=EmployeeToShow, Mode=TwoWay}"/>
ViewModel Özellikleri
o bağlıdır farklı bir çok şey denedik ama temelde ComboBox aşağıdaki kullanıyorumclass 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.SelectedValue>
<MultiBinding Converter="{StaticResource StringsToFullNameMultiConverter}"
Mode="OneWay" >
<Binding Path="EmpFirstName" />
<Binding Path="EmpLastName"/>
</MultiBinding>
</ComboBox.SelectedValue>
Şimdi olduğu gibi, program DependencyProperty.UnsetValue
'a ayarlanan değerler ile başlatıldığında dönüştürücü çağrılır. Bundan sonra kutudan bir isim seçtiğinizde bile bir daha asla çağrılmaz. İsimler hala bir ilk isim olarak görüntülenir.
Sağladığınız eğitici materyaller/örnekler için herhangi bir yardım veya işaretçi için teşekkür ederiz. Web'de bulmaya devam ettiğim her şey metin kutuları içindir ve bunları tüm gün gayet iyi kullanabilirim.
Tuhaf olarak bu çalışır, ancak xaml bir hatayla okunabilir, hata "Özellik" Metni 'MultiBinding' türündeki değerleri desteklemez. " Eminim bu kolay bir çözüm olacak, fakat gerçek sorunum çözüldüğünden beri sabaha kadar bırakıyorum! Yardımın için çok teşekkürler, HATASIZ beni uyanık tutmak için çözülmemiş bir gizemle yatmaya gidiyorum. –
Bu arada, dönüştürücü olmadan biçimlendirmek için sahip olduğunuz Kod mükemmel bir şekilde çalışıyor! –
Bu garip bir hata. Yine de zararsız bir Cider böceği gibi görünüyor. – Josh