Привязка иерархической модели данных к DataGrid - PullRequest
1 голос
/ 02 декабря 2010

У меня есть иерархическая структура данных для простого приложения WPF:

Объект TvshowCollection содержит объекты Tvshow.Каждый объект Tvshow содержит объект EpisodeCollection, который, в свою очередь, содержит объекты Episode.Модель интенсивно использует INotifyPropertyChanged.

Мне нужно отобразить список всех объектов Episode в сетке вместе с именем Tvshow.

Если я возьму всеЭпизоды из структуры и их привязка к ItemSource сетки позволяют легко связать каждое свойство эпизода со столбцом, но как я могу затем связать один из столбцов со связанным свойством Tvshow Name, которое находится выше в иерархии?

Можно ли как-то сгладить данные в ViewModel?

Надеюсь, это имеет смысл.

Спасибо!


edit:

Спасибо MAW74656, это то, что я хочу, чтобы конечный результат был - все эпизоды в отображаемой системе, с деталями Tvshow, повторенными в сетке (Airdate является свойством Episode):

Изображение здесь: http://i.stack.imgur.com/SY1Ib.png

У меня это работает сейчас, в некоторой степени, но не так, как мне особенно нравится.Я поместил свойство в ViewModel для Grid, чтобы оно возвращало объект, содержащий нужную мне информацию:

public class TvshowGridViewModel : BaseViewModel
{
    private Repository _repo;

    private TvshowCollection _allTvshows;

    public object AllTvshows
    {
        get
        {
            var flatList = from tvshow in _allTvshows
                           from episode in tvshow.Episodes
                           select new { TvshowName = tvshow.Name, EpisodeName = episode.Name, EpisodeNumber = episode.Number, EpisodeAirdate = episode.Airdate };
            return flatList;
        }
    }

    public TvshowGridViewModel()
    {
        _repo = new Repository("");
        _allTvshows = _repo.Tvshows;
    }
}

Но я не могу сделать это двусторонним связыванием.Есть ли способ лучше?

1 Ответ

1 голос
/ 03 декабря 2010

Попробуйте использовать объекты вместо строк:

var flatList = from tvshow in _allTvshows
               from episode in tvshow.Episodes
               select new { TvShow = tvshow, Episode = episode};

DataGrid должен иметь явно указанные столбцы:

<sdk:DataGridTextColumn Binding="{Binding TvShow.Name}" Header="Tv Show"/>
<sdk:DataGridTextColumn Binding="{Binding Episode.Name}" Header="Episode Name"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...