มันมีทางแค่ต้องการเป็นวัตถุด้วยอะไรซักอย่างที่สมาชิกของส่วนติดต่อโดยไม่ต้องการมันในข้อบังคับด้วยอะไรซักอย่างมันอยู่ใน c#?

0

คำถาม

ฉันกำลังกำหนดเองควบคุมคล้ายกับเป็น ItemsControl ดังนั้นมันมี Items ทรัพย์สินฉันอยากจะเป็น bindable ต้อแต่ในการสั่งซื้อสำหรับควบคุมของฉันต้องปรับปรุงทรัพย์สินต้องดำเนิ INotifyCollectionChanged. ฉันอยากของผู้ใช้จะสามารถให้พวกมีวัตถุตราบใดที่มัน implements ทั้งสอง INotifyCollectionChanged แล้ว IList.

ในขณะที่เรียบง่ายทางออกคือการสร้างใหม่ส่วนติดต่อรายการอย่างงั้น

public interface INotifyCollectionChangedAndList : INotifyCollectionChanged, IList { }

และต้องการมันเป็นสืบทอดพวกเขากำหนดเองชุดสะสมสิ่ง.

แต่แทนที่จะทำอย่างนี้พวกเขาควรจะเป็นสามารถใช้เวทมนตร์มาตรฐาน ObservableCollection<T> เช่นกันซึ่งมันสืบทอดทั้งสอง INotifyCollectionChanged แล้ว IList แต่มันยัง ไม่ได้ สืบทอด INotifyCollectionChangedAndList และฉันไม่สามารถควบคุมมองข้ามเรื่องแบบนี้ไปแล้วนะ เช่นกันถ้าพวกเขาใช้ห้องสมุดกับประเภทที่พวกเขาไม่สามารถควบคุมนั่นด้วยอะไรซักอย่างที่สองส่วนเชื่อมต่อมันควรจะยังคงทำงาน

ดังนั้นฉันขอถามคำถามคือถ้ามันมีทางได้ง่ายหรือไม่อย่างนั้น(i.e. เงาสะท้อน)ที่ที่ฉันสามารถกำหนดประเภทไหนเคยต้องรับคำสั่งเข้าใจทั้งหมดความต้องการของสอง(หรือมากกว่า)ส่วนเชื่อมต่อโดยไม่มี explicit SomeClass : INotifyCollectionChangedAndList?

แก้ไข

ผมเชื่อว่าคำตอบคือ ไม่. ดังนั้นฉันกำลังจะมาร์ค@เบนจามินคำตอบที่ถูกต้องเพราะถึงแม้ว่ามันอาจจะไม่ได้เป็นคนที่ดีที่สุดสำหรับควบคุมนักเขียนมันในคดีอื่นจะเข้าใกล้คำนั้นที่สุดสำหรับสิ่งที่ฉันจะไม่อย่างนั้นเหมือนจะประสบความสำเร็จ

1

คำตอบที่ดีที่สุด

1

ไม่มีอะไรที่ผมจะทำได้อีกแล้ว คุณไม่ต้องการจริงคือไรอัน แค่ทำให้ของชั้นเรียนทั่วไปและระบุว่าอะไรก็ตามที่ประเภทพารามิเตอร์คือเดินผ่านต้องเตรียมกำทั้งสองส่วนเชื่อมต่อ:

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

TModel จะเป็นอะไรที่ implements ทั้งสองคนส่วนเชื่อมต่อคุณต้องการดังนั้นคุณรู้อยู่เสมอนั่นของคุณ ItemsControllerคนจะต้องได้เป็นรุ่นของทรัพย์สินของประเภท TModel นั่น implements INotifyPropertyChanged และยังมี Items ทรัพย์สินของประเภท IEnumerable<TItem>.

2021-11-23 01:09:01

นั่นเป็น propery ทางของ constrainting คนประเภท param. แต่คุณไม่สามารถใช้เป็นชั้นเรียนอยู่ในมาตรฐาน XAML เพราะพวกนั้นประเภท params...ประเภท params ควรจะเลี่ยงไม่ควบคุม/fw ธาตุเรียน etc...
lidqy

ฉันลืมเรื่องประเภทโครงสรางแต่เหมือน lidqy นพูดถึงเรื่องควบคุมไม่สามารถใช้ generics อย่างง่ายดายและไมโครซอฟ discourages มันอยู่ในกฏ. จุดจบของผู้ใช้ไม่ควรต้องออกตอนอยู่กับ XAML และ generics.
Michael Wagner

เข้ามาเน็ 6.0 บางอย่า frameworks สนับสนุนทั่วไปควบคุม Blazor แต่ฉันไม่รู้เกี่ยวกับ WPF. ถ้าคุณไม่ต้องสนับสนุนบางทีคุณอาจจะสร้าง derived ประเภทนั้นปิดคนทั่วไปฐานประเภทนี้ได้นะ
benjamin

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่