6

मेरे पास एक साधारण खोज टेक्स्ट बॉक्स है। यह टेक्स्ट बॉक्स फिल्टर के रूप में कार्य करता है। मैंने अब 5 वें समय के लिए कोड कॉपी/पेस्ट किया है और पर्याप्त है। एक कस्टम नियंत्रण के लिए समय।WPF - सूची <T> एक निर्भरता के रूप में उपयोग की जा सकती है प्रॉपर्टी

बाएँ और दाएँ कोष्ठक()

मेरे कस्टम नियंत्रण के साथ प्रतिस्थापित किया गया है सरल हो जाएगा। मेरी समस्या यह है कि मैं इस निर्भरता पर निर्भरता चाहता हूं कि टाइप सूची (टी) है।

मैंने इसे प्रमाणित करने के लिए एक परीक्षण परियोजना बनाई और सुनिश्चित किया कि यह काम करता है। यह अच्छा काम करता है। सूची को अनदेखा करें।

नीचे संपूर्ण कक्षा है। समस्या यह है कि मुझे पकड़ने वाली एकमात्र चीज सूची (व्यक्ति) को सूची (टी) के साथ बदल रही है। सूची की तरह कुछ कहां है: टी ऑब्जेक्ट

टाइपऑफ (सूची (टी) कहां: टी ऑब्जेक्ट है) < = जाहिर है, मैं ऐसा नहीं कर सकता लेकिन एक विचार देता हूं कि मैं क्या करने की कोशिश कर रहा हूं।

public class SearchTextBox : TextBox 
{ 
    public static readonly DependencyProperty SourceProperty = 
     DependencyProperty.Register("FilterSource", typeof(List<Person>), typeof(SearchTextBox), new UIPropertyMetadata(null)); //I WANT THIS TO BE LIST<T> 

    public List<Person> FilterSource 
    { 
     get 
     { 
      return (List<Person>)GetValue(SourceProperty); 
     } 
     set 
     { 
      SetValue(SourceProperty, value); 
     } 
    } 

    public static readonly DependencyProperty FilterPropertyNameProperty = 
     DependencyProperty.Register("FilterPropertyName", typeof(String), typeof(SearchTextBox), new UIPropertyMetadata()); 

    public String FilterPropertyName 
    { 
     get 
     { 
      return (String)GetValue(FilterPropertyNameProperty); 
     } 
     set 
     { 
      SetValue(FilterPropertyNameProperty, value); 
     } 
    } 

    public SearchTextBox() 
    { 
     this.KeyUp += new System.Windows.Input.KeyEventHandler(SearchBox_KeyUp); 
    } 

    void SearchBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) 
    { 
     ICollectionView view = CollectionViewSource.GetDefaultView(FilterSource); 

     view.Filter = null; 
     view.Filter = new Predicate<object>(FilterTheSource); 
    } 

    bool FilterTheSource(object obj) 
    { 
     if (obj == null) return false; 

     Type t = obj.GetType(); 

     PropertyInfo pi = t.GetProperty(FilterPropertyName); 

     //object o = obj.GetType().GetProperty(FilterPropertyName); 

     String propertyValue = obj.GetType().GetProperty(FilterPropertyName).GetValue(obj, null).ToString().ToLower(); 

     if (propertyValue.Contains(this.Text.ToLower())) 
     { 
      return true; 
     } 

     return false; 
    } 
} 

उत्तर

11

नहीं; यह संभव नहीं है।
इसके बजाय, गैर-जेनेरिक typeof(IList) का उपयोग करें।

+0

क्या यह मेरी समस्या का समाधान करता है? मैं वास्तविक संपत्ति कैसे घोषित करूं? मैं सार्वजनिक IList <> फ़िल्टर स्रोत घोषित नहीं कर सकता। कंपाइलर त्रुटि। मुझे यह परिभाषित करने की आवश्यकता है कि आईलीस्ट में क्या नहीं है? – tronious

+0

@ उपयोगकर्ता 1631520: 'IList' के रूप में। – SLaks

+0

यदि मैं करता हूं कि संकलक मुझे "जेनेरिक प्रकार का उपयोग कर रहे हैं" सिस्टम.कोलेक्शन। जेनेरिक.आईएलआईस्ट 'को 1 तर्क की आवश्यकता है सार्वजनिक स्थैतिक रीडोनली निर्भरताप्रॉपर्टी स्रोतप्रॉपर्टी = निर्भरताप्रॉपर्टी। रजिस्ट्रार ("फ़िल्टरसोर्स", टाइपोफ (IList <>), टाइपफ़ोफ़ (SearchTextBox), नई UIPropertyMetadata (शून्य)); सार्वजनिक IList FilterSource – tronious

संबंधित मुद्दे

 संबंधित मुद्दे