Привязка данных WPF делает вещи большим количеством боли, чем это стоит?

То есть вы хотите удалить только один ключ из объекта Datas? Вот пример удаления только электронного письма.

const { email, ...rest } = immutate.data.Datas

const deleteData = {
  ...immutate,
  data: {
    ...immutate.data,
    Datas: {
      ...immutate.data.Datas,
      ...rest
    }
  }
}
5
задан Drew Noakes 23 February 2009 в 19:04
поделиться

8 ответов

Если Вы хотите UI, уведомляются, когда базовый источник данных изменяется, то Вам нужен своего рода механизм уведомления. Для WPF INotifyPropertyChanged является тем механизмом.

Это - то же в Windows Forms также, но Windows Forms также поддерживают старый механизм уведомления, где у Вас есть событие с именем <Property>Changed.

Однако ни один из них не потребовал этих механизмов, если все, что Вы хотите сделать, связывают с данными однажды и отображают его.

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

4
ответ дан 13 December 2019 в 19:36
поделиться

Истина быть сказанным, я не видел, что случалось так, что плохо, и думают это очень осуществимое решение.

Возьмите этот простой объект Модели данных:

Public Class SimpleItemViewModel
Implements INotifyPropertyChanged

Private _item As String 
Public Property Item As String
   Get 
       return _item 
   End Get 
   Set (value as string) 
      _item = value : OnPropertyChanged("Item") 
   End Set 
End Property 

Protected Overridable Sub OnPropertyChanged(propChange as string) 
   Raise Event PropertChanged(me, new PropertyChangedEventArgs(propChange))
End Sub 
Public Event PropertyChanged(sender as object, e as PropertyChangedEventArgs)
End Class

Это легко связывается с простым Текстовым полем через:

<Textbox Text="{Binding Item}" />

дополнительно, если я хотел иметь флаг DIRTY, я могу легко поместить флаг, устанавливаемый в OnPropertyChanged sub, и легко определить, должен ли я сохранить какие-либо пользовательские изменения или нет.

Я нашел самым легким иметь ряд классов, которые покоятся между Уровнем доступа к данным и UI, который содержит этот материал. У Вас может даже быть своя Бизнес-логика, и DAL раздают эти классы, а не атомарные значения.

4
ответ дан 13 December 2019 в 19:36
поделиться

Реализация INotifyProperty измененный не является особенно трудным, видя, поскольку это только имеет одного участника.

Если Вы не ожидаете, что изменения в основном объекте затем не волнуются о INotifyProperty измененный, и использование Привязка с Mode=OneTime.

Если основной объект может измениться, и Вы хотите, чтобы GUI отразил те изменения, то, как еще может, это достигается без вида уведомления это INotifyProperty измененный обеспечивает? Не разумно ожидать, что связанный объект опросит источник своей привязки.

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

2
ответ дан 13 December 2019 в 19:36
поделиться

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

0
ответ дан 13 December 2019 в 19:36
поделиться

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

1
ответ дан 13 December 2019 в 19:36
поделиться

DataBinding является единственным способом реализовать шаблон образцового представления в WPF/Silverlight. Ваши модели могут быть глупыми UI путем реализации INotifyPropertyChanged, который изолирует их от UI. Это также сохраняет много кода UI при наполнении информации в UI.

Другое преимущество, которым я пользуюсь, является способностью далее связать дочерние элементы управления с теми же данными при помощи {Обязательного} ярлыка.

0
ответ дан 13 December 2019 в 19:36
поделиться

Во-первых, INotifyPropertyChanged не является единственным способом заставить привязку данных работать - свойства зависимости работают также.

Во-вторых, INotifyPropertyChanged может быть реализован со всего одной строкой кода в Вашем классе объекта при использовании AOP - Вы не должны на самом деле делать всех тех вызовов уведомления сами.

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

0
ответ дан 13 December 2019 в 19:36
поделиться

Будьте так декларативны, как Вы можете в своей привязке. Позвольте шаблонной системе сделать, это - задание, и сделайте интенсивное использование DataTemplates, которые указывают явный DataTypes.

0
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: