2

このエラーが発生します:

System.Reflection.TargetException:オブジェクトがターゲットタイプと一致しません。

List<IEvent>IEventが予定、誕生日、またはその他のカレンダー関連のイベントタイプである可能性がある場所をバインドしようとする場合。

4

3 に答える 3

2

ChanChan、GridView はインターフェイスのコレクションへのバインドをサポートしていませ。アプリケーションを再設計して、確実に concreate クラスのコレクションにのみバインドするようにしてください。これに対する唯一の回避策は、基本クラス (あなたの場合は Event) を使用し、イベントのコレクションにバインドすることです。

        public  class Event
        {
            public  DateTime StartDate { get; set; }
        }
        public class Birthday : Event
        {       

            public DateTime? EndDate { get; set; }
        } 
        public class Appointment : Event
        {       

            public string Place { get; set; }
        }
        public class EventCollection : Collection<Event>
        {
            public static EventCollection GetEvents()
            {
                var events = new EventCollection();
                events.Add(new Birthday
                {
                     EndDate = DateTime.Now.AddDays(1),
                     StartDate = DateTime.Now
                });
                events.Add(new Appointment
                {
                    Place = "Gallery",
                    StartDate = DateTime.Now
                });
                return events;
             }
         }

基本クラスからの継承では「is a」関係が作成されますが、インターフェイスからの継承では「can do」関係が作成されることに注意してください。言い換えれば、誕生日は「イベント」であるため、IEvent を実装するのは悪い設計です。ここでは基本クラスから継承します。

これがお役に立てば幸いです、Valve。

于 2008-12-02T08:15:24.827 に答える
1

このようにしなければならないのは少し面倒ですが、複数の型のリストを GridView にバインドすることは可能ですTypeDescriptionProvider。基本型に対して を実装するだけです。

この記事の詳細:ポリモーフィック データバインディング ソリューション

于 2009-08-13T15:36:44.567 に答える
-1

これはできません。この機能が必要な場合は、グリッドビューを使用しないでください。これが唯一の回避策です。

于 2009-01-08T14:56:24.297 に答える