2012-02-26 6 views
1

У меня есть сетка, которую я называю, допустим, FooHistory. Теперь мне нужно много функциональности, связанной с этим, поэтому я иду вперед, и я создаю класс FooHistory. Теперь у меня есть класс FooHistory и элемент управления.Должен ли я писать классы для элементов управления WPF?

В моей MainWindow конструктору создать новый экземпляр этого класса и передать экземпляр this (т.е. MainWindow) в FooHistory класса рода инъекции, как зависимостей. Затем, когда класс FooHistory хочет взаимодействовать с элементом управления FooHistory, я делаю такие вещи, как this.mainWindow.FooHistory.Items.Add(...).

Мой вопрос в том, что это рекомендуемый способ написания приложений WPF или я пропустил некоторые фундаментальные подходы?

ответ

1

Мы используем для наших программ MVVM подхода. Хотя детали могут отличаться от программы к программе, MVVM обычно создается с тремя основными частями.

Модель: Это объект данных. Это может быть бизнес-данные, такие как

class Account 
{ 
    string Name {get;set;} 
    string Address {get;set; 
} 

, но также может быть UI данные, как:

class Window 
{ 
    Point Position {get;set;} 
    Size Size {get;set;} 
} 

Эти объекты для хранения данных, больше ничего. Нет событий, нет команд без методов (это одна точка, где различная интерпретация MVVM отличается).

ViewModel: Это должно обернуть модель и обеспечить логику вокруг базовой модели. Этот класс также используется для преобразования свойства бизнес-модели в понятное свойство представления.

class AccountViewModel 
{ 
    public AccountViewModel(Account aWrappedModel) 
    { 
    } 

    string Name {get {return Model.Name;} } 

    AddressObject Address { get{ return new AddressObject(Model.Address); } 
} 

Вид:

ли МОФ часть это может быть пользовательские элементы управления, пользовательские элементы управления, окна, DataTemplates и т.д. Несмотря на общий взгляд, его штраф, чтобы иметь код позади для просмотра в противном случае у вас есть сгибать заслонки только потому, что вы слышали, что в представлении не разрешено иметь код.

Обычный подход теперь состоит в том, чтобы создать модель, одну или несколько моделей просмотра и установить эти режимы просмотра как DataContext на ваш взгляд. Иногда вам нужен DataTemplate для отображения данных, например DataTemplate для нашего AccountViewModel.

<DataTemplate DataType="{x:Type AccountViewModel}"> 
    <StackPanel> 
     <TextBox Text="{Binding Name}/> 
     <Button Content="Save" Command="{Binding SaveAccount}"/> 
    </StackPanel> 
</DataTemplate> 

Этот дизайн сильно использует привязку данных, которая является основополагающей для MVVM и работает довольно хорошо. Конечно, может возникнуть пара проблем, например: Как обрабатывать коллекцию с помощью моделей? Как обрабатывать события в моделях, исходящих из ui? Как хранить данные?

Но для этого вы найдете много ресурсов здесь и в Интернете. Но этот ответ должен дать вам приблизительный обзор того, как я и многие другие люди работают с WPF.

1

, если большая часть функциональности является представление логики, вы можете создать пользовательский элемент управления (с помощью подклассов UserControl), и имеешь пару .xaml и .xaml.cs файлы, и поставить логику представления в. Файл xaml.cs.

Если большинство функциональных возможностей класса FooHistory является бизнес-логикой (или чем-либо иным, чем презентацией), стоит выделить элемент управления FooHistory из класса FooHistory, но в этом случае, возможно, лучше определить интерфейс для элемента управления, и передать FooHistory instsance ссылку на элемент управления, используя этот интерфейс. таким образом ваш класс FooHistory не должен ничего знать о презентации - даже не нужно знать, что это WPF.

Если вы можете избежать передачи дерева элементов управления (например, SomeWindow.ParentControl.ChildControl.Items), это облегчит вашу жизнь.

0

Да, вы можете ...... но нет необходимости делать это ........... альтернативный способ .........

Сделайте набор данных данных, используемых в вашей сетке ...... затем импортируйте весь набор данных в свою сетку. поэтому здесь нет необходимости добавлять элементы ..... теперь вы можете фильтровать, сортировать, добавлять, удалять или что угодно ...

1

То, что вы описали, похоже на какой-то шаблон Model-View-Presenter , вариант MVC. Поскольку это определенно хороший шаблон, особенно для ASP.NET и WinForms, он не использует некоторые основные концепции WPF.

Все, что вам не хватает, называется Связывание данных и команды. Кроме того, появился новый вариант MVC - Model-View-ViewModel (MVVM), иногда называемый Presentation Model. Грубо объяснили: Ваше окно называется View. Youd Busines Logic инкапсулирован в модель. Вы создаете класс ViewModel, который предоставляет некоторые свойства, которые представляют собой представление, специфичное для представления модели. VM также должна реализовать INotifyPropertyChanged, чтобы предоставить способ уведомления пользовательского интерфейса об изменениях данных. Вы выставляете операции таким же образом - свойством типа ICommand. В конструкторе View вы пишете что-то вроде this.DataContext = new ViewModel() Затем вы привязываете свои свойства управления View и ViewModel с помощью синтаксиса {Binding PropName}.

Вы также можете проверить некоторые рамки для MVVM как Prism, MVVM Light.

Вот некоторые примеры: http://rachel53461.wordpress.com/2011/05/08/simplemvvmexample/

+0

Интересно, можете ли вы указать мне место для учебника/статьи, в котором показано небольшое примерное приложение, сделанное с учетом MVVM? – Tower

+0

Я добавил несколько примеров, которые, кажется, хороши для меня, но я никогда не пытался учиться этому, поэтому я не гарантирую. Я бы начал работать с документацией. Всегда есть страница «Начало работы» или просто. – Pein

+0

@rFactor: Это хорошее место для запуска http://msdn.microsoft.com/en-us/magazine/dd419663.aspx – Grokys

Смежные вопросы