में मल्टीबाइंडिंग का उपयोग कैसे करें यह मुझे NUTS चला रहा है !!!एक WPF कॉम्बोबॉक्स
मेरे पास ComboBox
है जो कर्मचारी द्वारा एक क्वेरी फ़िल्टर करने के लिए उपयोग किया जाता है जो ठीक काम करता है लेकिन केवल कर्मचारियों को पहला नाम प्रदर्शित करता है। मैं कर्मचारियों पूरा नाम प्रदर्शित करने के लिए एक MultiValueConverter
उपयोग करना चाहते हैं (यदि हम 2 Mikes और 2 Daves नहीं था यह कम आवश्यक होगा)
नीचे (मेरे कार्य कोड और IMultiValueConverter
क्लास है अनावश्यक स्वरूपण संक्षिप्तता के लिए बाहर छंटनी के साथ)। मैंने मल्टीकॉन्टर को काम करने के बारे में सोचने की हर चीज की कोशिश की है लेकिन मुझे कोई भाग्य नहीं मिला है।
// 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 गुण यह स्वाभाविक है
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 को एक त्रुटि के साथ हाइलाइट किया जाता है, त्रुटि "संपत्ति 'टेक्स्ट' प्रकार 'मानों को' मल्टीबाइंडिंग 'प्रकार के मानों का समर्थन नहीं करती है। मुझे यकीन है कि यह एक आसान फिक्स होगा लेकिन मैं इसे तब तक छोड़ रहा हूं जब से मेरा असली मुद्दा हल हो गया है! मदद के लिए बहुत बहुत धन्यवाद, मुझे जागृत रखने के लिए मुझे एक अनसुलझा रहस्य के साथ बिस्तर पर जाने से नफरत है –
वैसे, आपके पास कनवर्टर के बिना फ़ॉर्मेटिंग के लिए कोड पूरी तरह से काम करता है! –
यह एक अजीब त्रुटि है। लगता है जैसे यह एक हानिरहित साइडर बग हो सकता है हालांकि। – Josh