Привязка данных к отдельным свойствам основного объекта данных - PullRequest
0 голосов
/ 26 мая 2010

Это мой код ViewModel: В.Б:

Public Property Doctor() As Doctor
        Get
            Return _objDoctor
        End Get
        Set(ByVal Value As Doctor)
            _objDoctor = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property AddDate() As Nullable(Of DateTime)
        Get
            Return _objDoctor.AddDate
        End Get
        Set(ByVal Value As Nullable(Of DateTime))
            _objDoctor.AddDate = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property AddUserID() As String
        Get
            Return _objDoctor.AddUserID
        End Get
        Set(ByVal Value As String)
            _objDoctor.AddUserID = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property ChangeDate() As Nullable(Of DateTime)
        Get
            Return _objDoctor.ChangeDate
        End Get
        Set(ByVal Value As Nullable(Of DateTime))
            _objDoctor.ChangeDate = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property ChangeUserID() As String
        Get
            Return _objDoctor.ChangeUserID
        End Get
        Set(ByVal Value As String)
            _objDoctor.ChangeUserID = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property CollaboratingPhysicianID() As Nullable(Of Int64)
        Get
            Return _objDoctor.CollaboratingPhysicianID
        End Get
        Set(ByVal Value As Nullable(Of Int64))
            _objDoctor.CollaboratingPhysicianID = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property CredentialsID() As Int64
        Get
            Return _objDoctor.CredentialsID
        End Get
        Set(ByVal Value As Int64)
            _objDoctor.CredentialsID = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property DisplayName() As String
        Get
            Return _objDoctor.DisplayName
        End Get
        Set(ByVal Value As String)
            _objDoctor.DisplayName = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property DoctorSpecialtyID() As Int64
        Get
            Return _objDoctor.DoctorSpecialtyID
        End Get
        Set(ByVal Value As Int64)
            _objDoctor.DoctorSpecialtyID = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property FirstName() As String
        Get
            Return _objDoctor.FirstName
        End Get
        Set(ByVal Value As String)
            _objDoctor.FirstName = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property ID() As Int64
        Get
            Return _objDoctor.ID
        End Get
        Set(ByVal Value As Int64)
            _objDoctor.ID = Value
            OnPropertyChanged("Doctor")
        End Set
    End Property

    Public Property LastName() As String
        Get
            Return _objDoctor.LastName
        End Get
        Set(ByVal Value As String)
            _objDoctor.LastName = Value
            OnPropertyChanged("LastName")
        End Set
    End Property

Вот пример XAML, который я мог бы использовать:

<StackPanel>
        <TextBox Text="{Binding LastName}" />
        <TextBox Text="{Binding Doctor.LastName}" />
    </StackPanel>

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

Проблема в следующем:

Если я загружу доктора в новый конструктор модели представления как таковой:

Public Sub New()
    If IsInDesignMode Then
    Else
        CreateEventSubscriptions()
    End If
    Me.Doctor = DoctorService.GetDoctor(4839)

End Sub

Привязка данных работает правильно с первого раза. Но если я попытаюсь сменить связанного доктора с событием, сработает только привязка doctor.lastname.

    Private Sub onEdit(ByVal d As Doctor)
        Me.Doctor = DoctorService.GetDoctor(d)


    End Sub

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

Я получил код для своих свойств viewmodel, используя XAML PowerToys Карла Шиффлета. Зная, что Карл знает, что он делает, я не уверен, почему я не могу заставить это работать ... надеюсь, это что-то глупое, что мне не хватает.

1 Ответ

1 голос
/ 26 мая 2010

Я считаю, что если вы смените врача во время мероприятия, вам также следует позвонить:

OnPropertyChanged("LastName")

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

...