2009-02-19 4 views
4

Я немного удивлен тем, что при изучении WPF/XAML/Silverlight почти все примеры XAML/C#, с которыми я столкнулся, имеют события «Click» в XAML и очень немногие в конструкторе Window или Page.- это «неинтрузивный код-позади» хорошая или плохая практика?

Со всеми акцент в эти дни на «ненавязчивого Javascript», я думаю, что больше разработчиков будет на самом деле структурирования их XAML/код-за так:

XAML:

<Grid> 
    <Button x:Name="btnEdit"/> 
</Grid> 

код позади:

public Window1() 
{ 
    InitializeComponent(); 

    btnEdit.Content = "Edit"; 
    btnEdit.Click += new RoutedEventHandler(btnEdit_Click); 
} 

private void btnEdit_Click(object sender, RoutedEventArgs e) 
{ 
    btnEdit.Content = "This button was clicked."; 
} 

Любые мысли о том, почему это будет хорошей или плохой практикой?

ответ

6

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

В реальных приложениях XAML используется только для декларативного программирования. Например, привязка команды к кнопке или объявление привязки данных. У Карла Шиффлетта есть отличные статьи о шаблоне MVVM, который очень хорошо отделяет проблемы вашего приложения WPF/Silverlight.

Код позади, на мой взгляд, подходит для крошечных приложений. Он имеет тенденцию смешивать представление, контроль и данные.

1

Если я правильно помню, я думаю, что есть частичный класс, который реализует код Init выше, который является кодом, созданным визуальной студией. Я не могу говорить для WPF, но он делает это в ASP.Net 2.0, поэтому я предполагаю, что он делает то же самое здесь. Мне потребовалось время, чтобы привыкнуть к этому.

Согласен. Я ненавижу определение событий в разметке.

0

Я согласен с вашей озабоченностью.

После долгих дискуссий мы следуем аналогичной схеме неинтрузивных, сверхточных стратегий XAML и привязки и данных в кодировке.

Если вы добавляете события в XAML, на экран кода отображается контекстное меню. Если вы связываете команды в XAML, эквивалента нет. Вы можете перемещаться из объявления команды в XAML, но не там, где оно назначено для свойства Command в элементе управления.

-2

MVVM - плохая практика. Вы считаете, что вы разделяете данные и представление. И что? Общий механизм с привязкой XAML, связывание команд, перевод его на методы и внедрение INotifyPropertyChanged для чего? Для UTests (я сделал - я тестирую концепцию он-он)? Правильное программное обеспечение требуется только в пользовательском тесте ... Это ваш код разделен таким образом, что вы иногда не понимаете, где что.

Для чего вы используете INotify? Для чего Microsoft ВСЕ WPF-элементы управления и объекты в целом в WPF наследуют от FrameworkElement с помощью magic DependencyProperties?

Множественное связывание - это сложная методика использования слова (читайте авторы MVVM).

Я написал сложную трехмерную систему CAE без каких-либо шаблонов меньше года ... с классической организацией приложения с классами и кодом. https://skydrive.live.com/?cid=ea6ad1087e3103f0&sc=photos&id=EA6AD1087E3103F0!103&sff=1#cid=EA6AD1087E3103F0&id=EA6AD1087E3103F0!118&sc=photos

Все образцы в MVVM около клиентов в компании ... Я предлагаю поставить шаблон имя MVVMCC (Заказчик в компании)

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