Привязка данных к ссылочным типам - PullRequest
0 голосов
/ 05 февраля 2009

У меня есть некоторые классы с такими свойствами, и они отлично работают, потому что они очень нормальные:

    Public Overridable Property CustomerLastName() As String
        Get
            Return m_CustomerLastName.Value
        End Get
        Set(ByVal Value As String)
            m_CustomerLastName.Value = Value
        End Set
    End Property

Я хочу изменить их так, чтобы они работали так (и не беспокойтесь о том, что такое IField, достаточно сказать, что он представляет поле в таблице):

    Public Overridable Readonly Property CustomerLastName() As IField
        Get
            Return m_CustomerLastName
        End Get
    End Property

Таким образом, вы можете сделать Customer.CustomerLastName.PreviousValue или Customer.CustomerLastName.IsDirty и т. Д.

Но это не правильно связывает. Понятно, поскольку предполагается, что привязка данных - это двусторонняя вещь, и здесь есть отражение и т. Д.

Конечно, это все еще может быть улица с двусторонним движением, мне просто нужно сказать: «Привет, привязка данных! Посмотрите сюда!»

Итак. Что мне здесь делать?

Примечание: Прямо сейчас все, что я пытаюсь сделать, это привязать DataBind к GridView для целей отображения. Но я хочу, чтобы это было гибко.

1 Ответ

0 голосов
/ 05 февраля 2009

(Update re edit) Если это только для целей отображения, вы можете просто установить ToString () на класс, который реализует IField.


(оригинал)

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

Re IsDirty - это ShouldSerializeValue в PropertyDescriptor терминах.

...