0

我想创建一个应用程序来连接到 Web 服务并返回一些数据。我一直在关注一些教程并具有以下代码:

Public Class ItemViewModel
Implements INotifyPropertyChanged
Private _Name As String

Public Property Name() As String
    Get
        Return _Name
    End Get
    Set(ByVal value As String)
        If Not value.Equals(_Name) Then
            _Name = value
            NotifyPropertyChanged("Name")
        End If
    End Set
End Property

.....以及类似于我数据库中的表的其他属性。

然后我有一个 MainViewModel

Private _Customer As New CustomerService.Customer   

Public Sub LoadData()
    Dim myService As New CustomerService.CustomerClient

    myService.GetCustomerByNameAsync("Andy")
    AddHandler myService.GetCustomerByNameCompleted, AddressOf CustomerByName

    Items.Add(NewItemViewModel With {.Name = _Customer.Name})

 End Sub

Private Sub CustomerByName(sender As Object, e As CustomerService.GetCustomerByNameCompletedEventArgs)
    _Customer = e.Result
End Sub

我遇到的问题是,当我使用 WCF 测试工具检查时服务返回数据,但在这种情况下,当运行应用程序时,我一直为 _Customer 获取一个空对象。我已经尝试将它变成一个共享变量,但似乎没有任何东西可以保存我从服务中获得的数据。

我怎么能在我的 MainViewModel 中保存数据?

谢谢

4

1 回答 1

0

问题是 GetCustomerByNameAsync 异步执行,因此Items.Add(NewItemViewModel With {.Name = _Customer.Name})在服务响应和内部代码执行之前CustomerByName执行。如果您在事件处理程序 (CustomerByName) 中移动添加代码,它应该可以按照您的意愿工作。

于 2013-09-12T21:55:06.180 回答