public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
            {
                return null;
            }

            King king = new King();
            if (value.GetType() == typeof(King))
            {
                king = (King)value;
            }
            else
            {
                king = ((KingEvent)value).Ruler;
            }
            if (parameter != null)
	        {
                Type kingType = typeof(King);
                return kingType.GetProperty(parameter.ToString()).GetValue(king, null);
            }

            return king;
        }
        private void SelectKing(King king, KingEvent kingEvent)
        {
            List<object> newSelectedItems = new List<object>()
            {
                king,
                kingEvent
            };

            this.SelectedItems = newSelectedItems;
        }
 private void SelectKing(King king)
 {
     this.SelectKing(king, this.events.First(kingEvent => kingEvent.Ruler == king));
 }
        protected override IEnumerable ParseData(System.IO.TextReader dataReader)
        {
            string line;

            int lineCounter = 0;

            List<King> kingsData = new List<King>();
            List<KingEvent> eventsData = new List<KingEvent>();

            while ((line = dataReader.ReadLine()) != null)
            {
                if (string.IsNullOrEmpty(line))
                    continue;

                var strings = line.Split(';');

                if (lineCounter <= 60)
                {
                    King king = new King();

                    king.Begin = DateTime.Parse(strings[0]);
                    king.End = DateTime.Parse(strings[1]);
                    king.Name = strings[2];
                    king.House = strings[3];

                    king.Birth = DateTime.Parse(strings[4]);
                    king.Parents = strings[5];
                    king.Married = strings[6];
                    king.Children = strings[7];
                    king.Death = lineCounter == 60 ? DateTime.MaxValue : DateTime.Parse(strings[8]);
                    king.Successor = lineCounter == 60 ? "Current ruler" : strings[9];
                    king.Bio = strings[10];

                    var stringsCount = strings.Count();
                    if (10 < stringsCount - 1)
                    {
                        for (int i = 10; i < stringsCount; i++)
                        {
                            king.Bio += strings[i];
                        }
                    }

                    kingsData.Add(king);
                }
                else
                {
                    KingEvent kingEvent = new KingEvent();

                    kingEvent.Ruler = kingsData.First(item => item.Name == (strings[0]));
                    kingEvent.Begin = DateTime.Parse(strings[1]);
                    kingEvent.End = DateTime.Parse(strings[1]);
                    kingEvent.EventDescription = strings[2];

                    eventsData.Add(kingEvent);
                }

                lineCounter++;
            }

            List<object> data = new List<object>();
            data.AddRange(kingsData);
            data.AddRange(eventsData);

            return data;
        }