Создание класса ObservableCollection <T> - PullRequest
2 голосов
/ 22 октября 2011

У меня есть класс person и я хочу создать класс ObservableCollection<person> с именем people. Я видел несколько примеров подобных реализаций, но не до конца понимаю различия в них. Например:

public class people : ObservableCollection<person>
{
    public people()
    {
    }
}

и

public class people
{
    ObservableCollection<person> public people()
    {
    }
}

Является ли одна из этих реализаций принципиально неправильной? У меня нет никакого рабочего кода, но я бы хотел, чтобы толчок в правильном направлении начался.

РЕДАКТИРОВАТЬ (согласно предложению @ Groky):

Я хочу создать ObservableCollection<Person>. Я хотел бы использовать эту коллекцию в настройке MVVM с привязкой. В частности, я хотел бы привязать имя и фамилию всех людей, например, к пользовательскому элементу управления.

ПЕРВЫЙ: Это плохая практика - создавать класс как таковой, или я должен реализовать ObservableCollection внутри модели представления, как предлагает @Groky?

ВТОРОЕ: использование ObservableCollection даже является правильным маршрутом для решения этого типа проблемы?

Ответы [ 2 ]

3 голосов
/ 22 октября 2011

Звучит так, как будто вы используете шаблон MVVM с WPF и пытаетесь создать класс ViewModel.

Как упомянул предыдущий ответчик, ваши две опции описывают 1) Наследование 2) Делегация.Какой из них выбрать, зависит от значения того, что вы пытаетесь представить.

Вы бы выбрали наследование, если логически пытаетесь добавить что-то в коллекцию людей.Однако, поскольку вы намекаете, что хотите связать дополнительные свойства в WPF, это говорит о том, что вы не логически добавляете свойство в коллекцию;Чем больше вы добавляете свойство рядом с коллекцией.Поэтому в этом случае вы создаете ViewModel на языке WPF.

Вот пример:

public PeopleViewModel
{
    public PeopleViewModel()
    {
        Items = new ObservableCollection<Person>();
    }

    public ObservableCollection<Person> Items { get; private set; }

    public int NumberOfPeople 
    { 
        get { return Items.Distinct().Count; }
    }
}
1 голос
/ 22 октября 2011

Я думаю, что у вас есть несколько вариантов, например, наследование или шаблон делегирования.Таким образом, в первом варианте у вас есть шаблон наследования, во втором составе - миксин и шаблон аспекта.

...