2012-04-03 60 views
1

我有我的用戶RelayCommand commandParameter爲空

<Button Grid.Row="13" Grid.Column="7" Content="Save" Name="btnSave" 
      CommandParameter="{Binding CompanyDetails}" 
      Command="{Binding SaveCommand}" /> 

SaveCommand是RelayCommand在視圖模型聲明的按鈕。 CompanyDetails是同一個ViewModel中的一個屬性。 上面提到的ViewModel是我的UserControl的datacontext。

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 

usercontrol上的其他字段綁定到ObjectDataProvider,該ObjectDataProvider調用GetCompanyDetails函數。 CompanyDetails在每次調用此函數時都設置正確,直到我調用SaveIt子例程。 SaveIt被調用時,其參數始終爲Nothing。我在哪裏犯錯誤? 非常感謝您的回答。

回答

0

CompanyViewModel的建築工填充CompanyDetailsGetCompanyDetails功能。更改構造函數爲波紋管,

Public Sub New() 
    _myData = New DataFromDatabase(My.Settings.ConnectionString) 
    _saveCommand = New RelayCommandWithParameter(New Action(Of Object)(AddressOf SaveIt)) 
    _companyDetails = GetCompanyDetails() 
End Sub 

這可能有所幫助。 祝你好運。

0

自從我做了VB以來就有一段時間了,我從來沒有用過WPF,但我想我知道你的問題是什麼。

要初始化命令的方式,你實際上並沒有傳入參數。

當我在C#中做它看起來像這樣=>

_saveCommand = new RelayCommandWithParameter(
      (param) => 
      { 
       SaveIt((int)param); 
      }, 
       // this line is the same as your commented out Me.CanSave 
      (param) => { return this.CanDisplaySelectedPolicy; }); 

所以你可以看到,在lamda表達式中,我傳遞一個名爲param的參數,然後將其放入SaveIt方法中。

當您創建新動作時,請嘗試在上面放置一個lamda表達式,以便將參數傳遞給SaveIt方法。