वहाँ एक तरीका है करने के लिए बस की आवश्यकता होती है एक वस्तु को लागू सदस्यों के लिए एक इंटरफेस की आवश्यकता के बिना यह करने के लिए स्पष्ट रूप से इसे लागू c#में?

0

सवाल

मैं कर रहा हूँ एक कस्टम नियंत्रण के लिए इसी तरह की एक ItemsControl तो यह एक Items संपत्ति मैं करने के लिए चाहते हो सकता है bindable करने के लिए लेकिन क्रम में के लिए अपने नियंत्रण अद्यतन करने के लिए, संपत्ति को लागू करना चाहिए INotifyCollectionChanged. मैं करना चाहते हैं उपयोगकर्ता सक्षम होना करने के लिए बाध्य करने के लिए किसी भी वस्तु इतने लंबे समय के रूप में यह लागू करता है दोनों INotifyCollectionChanged और IList.

जबकि सरल समाधान है बनाने के लिए एक नया इंटरफेस सूची की तरह

public interface INotifyCollectionChangedAndList : INotifyCollectionChanged, IList { }

की आवश्यकता है और यह विरासत में मिला हो, पर अपने कस्टम संग्रह की वस्तुओं.

हालांकि, ऐसा करने के बजाय वे भी होना चाहिए का उपयोग करने में सक्षम मानक ObservableCollection<T> के रूप में अच्छी तरह से करता है, जो दोनों के वारिस INotifyCollectionChanged और IList लेकिन यह करता है नहीं वारिस INotifyCollectionChangedAndList और मैं वास्तव में नहीं है पर नियंत्रण है. इसी तरह अगर वे का उपयोग एक अलग पुस्तकालय के साथ एक प्रकार है कि वे नियंत्रण नहीं कर सकते हैं कि को लागू करता है दो इंटरफेस यह अभी भी काम करना चाहिए.

तो मेरा सवाल है अगर वहाँ एक तरह से, आसान या अन्यथा (यानी प्रतिबिंब), जहां मैं निर्दिष्ट कर सकते हैं किसी भी प्रकार का इस्तेमाल किया जाना चाहिए लागू सभी आवश्यकताओं के दो (या अधिक) इंटरफेस के बिना स्पष्ट SomeClass : INotifyCollectionChangedAndList?

संपादित करें

मुझे विश्वास है कि जवाब है कोई. तो मैं कर रहा हूँ मार्क @बेंजामिन जवाब के रूप में सही है, हालांकि, क्योंकि यह नहीं हो सकता है सबसे अच्छा नियंत्रण के लिए लेखकों, यह अन्य मामलों में हो सकता है निकटतम बात करने के लिए मैं क्या होगा अन्यथा की तरह प्राप्त करने के लिए ।

1

सबसे अच्छा जवाब

1

हाँ, वहाँ है । आप की जरूरत नहीं है, प्रतिबिंब है । बस अपने वर्ग के सामान्य और निर्दिष्ट करें कि जो कुछ भी प्रकार पैरामीटर पारित हो जाता है को लागू करना चाहिए दोनों इंटरफेस:

    public class ItemsController<TModel, TItem> where TModel : INotifyPropertyChanged, IEnumerable<TItem>
    {
        public TModel Model { get; set; }
    }

TModel कुछ भी हो सकता है लागू करता है कि दोनों के इंटरफेस के लिए आप की आवश्यकता होती है, ताकि आप हमेशा पता है कि अपने ItemsControllerएस होगा एक आदर्श संपत्ति के प्रकार TModel लागू करता है कि INotifyPropertyChanged और यह भी एक Items संपत्ति के प्रकार IEnumerable<TItem>.

2021-11-23 01:09:01

यही कारण है कि propery तरह के constrainting प्रकार परम. हालांकि आप का उपयोग नहीं कर सकते इस तरह के एक वर्ग में मानक XAML क्योंकि उन प्रकार params... प्रकार params में बचा जाना चाहिए नियंत्रण / परिवार कल्याण तत्व कक्षाओं आदि...
lidqy

मैंने किया था के बारे में भूल जाते प्रकार की कमी है, लेकिन जैसे lidqy उल्लेख नियंत्रण का उपयोग नहीं कर सकते जेनरिक आसानी से और माइक्रोसॉफ्ट को हतोत्साहित यह अपने दिशा-निर्देशों में. अंत उपयोगकर्ता नहीं होना चाहिए करने के लिए चारों ओर गंदगी के साथ XAML और जेनरिक.
Michael Wagner

में .नेट 6.0 कुछ चौखटे समर्थन जेनेरिक नियंत्रित करता है । Blazor करता है, लेकिन मैं नहीं जानता के बारे में WPF. यदि आप नहीं का समर्थन किया है, हो सकता है आप बना सकता है एक व्युत्पन्न प्रकार है कि बंद कर देता है सामान्य आधार प्रकार.
benjamin

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में