Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В привязке данных исходный объект привязки ссылается на объект, из который вы получаете данные. В этой статье рассматриваются типы объектов, которые можно использовать в качестве источника привязки, например объекты .NET CLR, XML и DependencyObject объекты.
Типы источников привязки
Привязка данных Windows Presentation Foundation (WPF) поддерживает следующие типы источников привязки:
Объекты среды CLR .NET
Вы можете привязать к общедоступным свойствам, вложенным свойствам и индексаторам любого объекта среды CLR. Подсистема привязки использует рефлексию CLR для получения значений свойств. Объекты, реализующие ICustomTypeDescriptor или зарегистрированные TypeDescriptionProvider , также работают с подсистемой привязки.
Дополнительные сведения о реализации класса, который может служить источником привязки, см . в статье "Реализация источника привязки для объектов далее в этой статье".
Динамические объекты
Можно привязать к доступным свойствам и индексаторам объекта, реализующего интерфейс IDynamicMetaObjectProvider. Если вы можете получить доступ к члену в коде, можно привязать его к нему. Например, если динамический объект позволяет получить доступ к члену в коде с помощью
SomeObject.AProperty
, можно привязать его, установив путь привязки кAProperty
.объекты ADO.NET
Можно привязать к объектам ADO.NET, таким как DataTable. ADO.NET DataView реализует интерфейс IBindingList, предоставляющий уведомления об изменениях, прослушиваемые подсистемой привязки.
XML-объекты
Вы можете привязать и запустить запросы
XPath
на XmlNode, XmlDocumentили XmlElement. Удобный способ доступа к XML-данным, являющимся источником привязки в разметке, — использовать объект XmlDataProvider. Дополнительные сведения см. в разделе "Привязка к XML-данным с помощью XMLDataProvider" и "Запросы XPath" (платформа .NET Framework).Можно также привязать к XElement или XDocumentили привязать к результатам запросов, выполняемых на объектах этих типов, с помощью LINQ to XML. Удобный способ использования LINQ to XML для доступа к XML-данным, которые является источником привязки в разметке, — использовать объект ObjectDataProvider. Дополнительные сведения см. в разделе Bind to XDocument, XElement или LINQ for XML Query Results (платформа .NET Framework).
DependencyObject Объектов
Можно привязать к свойствам зависимостей любого DependencyObject. Пример см. в разделе "Привязка свойств двух элементов управления" (платформа .NET Framework).
Реализация источника привязки для объектов
Объекты СРЕДЫ CLR могут стать источниками привязки. При реализации класса в качестве источника привязки следует учитывать несколько вещей.
Предоставление уведомлений об изменениях
Если вы используете либо OneWayTwoWay привязку, реализуйте подходящий механизм уведомления "изменено свойство". Рекомендуемый механизм заключается в том, чтобы среда CLR или динамический класс реализовали интерфейс INotifyPropertyChanged. Дополнительные сведения см. в разделе "Практическое руководство. Реализация уведомления об изменении свойств (платформа .NET Framework)".
Существует два способа уведомления подписчика об изменении свойства:
Реализуйте интерфейс INotifyPropertyChanged.
Это рекомендуемый механизм для уведомлений. INotifyPropertyChanged Предоставляет PropertyChanged событие, которое учитывает система привязки. Создав это событие и указав имя измененного свойства, вы уведомите целевой объект привязки об изменении.
PropertyChanged
Реализуйте шаблон.Каждое свойство, которое должно уведомлять целевой объект привязки об изменении, имеет соответствующее
PropertyNameChanged
событие, гдеPropertyName
является имя свойства. Вы вызываете событие каждый раз при изменении свойства.
Если источник привязки реализует один из этих механизмов уведомлений, целевые обновления выполняются автоматически. Если по какой-либо причине источник привязки не предоставляет правильные уведомления об изменении свойства, можно использовать UpdateTarget метод для явного обновления целевого свойства.
Другие характеристики
В следующем списке приведены другие важные моменты.
Объекты данных, которые служат источниками привязки, можно объявить в XAML как ресурсы, если у них есть конструктор без параметров. В противном случае необходимо создать объект данных в коде и напрямую назначить его контексту данных дерева объектов XAML или в качестве источника привязки привязки.
Свойства, используемые в качестве свойств источника привязки, должны быть общедоступными свойствами класса. Явным образом определенные свойства интерфейса не могут быть доступны для целей привязки, а также не могут быть защищены, закрытые, внутренние или виртуальные свойства, не имеющие базовой реализации.
Нельзя привязать к общедоступным полям.
Тип свойства, объявленного в классе, является типом, передаваемым в привязку. Однако тип в конечном счете, используемый привязкой, зависит от типа целевого свойства привязки, а не от свойства источника привязки. Если имеется разница в типе, может потребоваться написать преобразователь для обработки первоначальной передаче пользовательского свойства в привязку. Дополнительные сведения см. в разделе IValueConverter.
Все объекты в качестве источника привязки
Вы можете использовать весь объект в качестве источника привязки. Укажите источник привязки с помощью Source свойства или DataContext свойства, а затем укажите пустое объявление привязки: {Binding}
Сценарии, в которых это полезно, включают привязку к объектам, которые имеют тип строки, привязку к объектам с несколькими нужными свойствами или привязку к объектам коллекции. Пример привязки ко всему объекту коллекции см. в разделе "Использование шаблона master-Detail" с иерархическими данными (платформа .NET Framework).
Может потребоваться применить пользовательскую логику, чтобы данные имели смысл для свойства целевого объекта привязки. Пользовательская логика может находиться в виде пользовательского преобразователя или преобразователя DataTemplate. Дополнительные сведения о преобразователях см. в разделе "Преобразование данных". Дополнительные сведения о шаблонах данных см. в разделе "Общие сведения о шаблоне данных" (платформа .NET Framework).
Объекты коллекции в качестве источника привязки
Часто объект, который требуется использовать в качестве источника привязки, является коллекцией пользовательских объектов. Каждый объект служит источником для одного экземпляра повторяющейся привязки. Например, у вас может быть коллекция, состоящая CustomerOrders
из CustomerOrder
объектов, где приложение выполняет итерацию по коллекции, чтобы определить количество заказов и данные, содержащиеся в каждом порядке.
Вы можете перечислить любую коллекцию, реализующую интерфейс IEnumerable. Однако чтобы настроить динамические привязки таким образом, чтобы вставки или удаления в коллекции обновлялись автоматически, коллекция должна реализовать интерфейс INotifyCollectionChanged. Этот интерфейс предоставляет событие, которое должно вызываться при изменении базовой коллекции.
Класс ObservableCollection<T> — это встроенная реализация коллекции данных, которая предоставляет интерфейс INotifyCollectionChanged. Отдельные объекты данных в коллекции должны соответствовать требованиям, описанным в предыдущих разделах. Пример см. в разделе "Создание и привязка к observableCollection" (платформа .NET Framework). Прежде чем реализовать собственную коллекцию, рассмотрите возможность использования ObservableCollection<T> или одного из существующих классов коллекций, таких как List<T>, Collection<T>и BindingList<T>, среди прочего.
При указании коллекции в качестве источника привязки WPF не привязывается непосредственно к коллекции. Вместо этого WPF фактически привязывается к представлению коллекции по умолчанию. Сведения о представлениях по умолчанию см. в разделе "Использование представления по умолчанию".
Если у вас есть расширенный сценарий и вы хотите реализовать собственную коллекцию, рассмотрите возможность использования интерфейса IList. Этот интерфейс предоставляет не универсальную коллекцию объектов, к которым можно получить отдельный доступ по индексу, что может повысить производительность.
Требования к разрешениям в привязке данных
В отличие от платформа .NET Framework, .NET работает с безопасностью полного доверия. Все привязки данных выполняются с тем же доступом, что и пользователь, выполняющий приложение.
См. также
.NET Desktop feedback