ユーザーコントロールにボタンがあります
<Button Grid.Row="13" Grid.Column="7" Content="Save" Name="btnSave"
CommandParameter="{Binding CompanyDetails}"
Command="{Binding SaveCommand}" />
SaveCommand は、ViewModel で宣言された RelayCommand です。CompanyDetails は、同じ ViewModel 内のプロパティです。上記のViewModelは、私のUserControlのデータコンテキストです。
Public Class CompanyViewModel
Inherits ViewModelBase
Implements IDataErrorInfo
Private _myData As DataFromDatabase
Private _companyDetails As New CompanyDetailsBase
Private _saveCommand As RelayCommandWithParameter
Public Property CompanyDetails() As CompanyDetailsBase
Get
Return _companyDetails
End Get
Set(ByVal value As CompanyDetailsBase)
_companyDetails = value
OnPropertyChanged("CompanyDetails")
End Set
End Property
Public Property SaveCommand() As RelayCommandWithParameter
Get
If _saveCommand Is Nothing Then
Dim saveAction As New Action(Of Object)(AddressOf Me.SaveIt)
_saveCommand = New RelayCommandWithParameter(saveAction) ', Me.CanSave)
End If
Return _saveCommand
End Get
Set(ByVal value As RelayCommandWithParameter)
_saveCommand = value
End Set
End Property
Public Sub New()
_myData = New DataFromDatabase(My.Settings.ConnectionString)
_saveCommand = New RelayCommandWithParameter(New Action(Of Object)(AddressOf SaveIt))
End Sub
Public Function GetCompanyDetails(ByVal sap As String) As CompanyDetailsBase
CompanyDetails = _myData.GetCompanyDetails(sap)
Return CompanyDetails
End Function
Public Sub SaveIt(ByVal c As CompanyDetailsBase)
MessageBox.Show("Save customer " & c.Sap)
End Sub
End Class
ユーザー コントロールの他のフィールドは、GetCompanyDetails 関数を呼び出す ObjectDataProvider にバインドされます。CompanyDetails は、SaveIt サブルーチンを呼び出すまで、この関数が呼び出されるたびに正しく設定されます。SaveIt が呼び出されると、そのパラメーターは常に Nothing です。どこで間違いを犯しますか?回答ありがとうございました。