我的用户控件上有一个按钮
<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。我该在哪里犯错呢?非常感谢你的回答。
发布于 2012-04-03 17:44:35
在CompanyViewModel的构造器中,用GetCompanyDetails函数填充CompanyDetails。如下所示更改构造函数,
Public Sub New()
_myData = New DataFromDatabase(My.Settings.ConnectionString)
_saveCommand = New RelayCommandWithParameter(New Action(Of Object)(AddressOf SaveIt))
_companyDetails = GetCompanyDetails()
End Sub这可能会有帮助。祝好运。
发布于 2012-04-03 18:57:26
我做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方法传递一个参数。
https://stackoverflow.com/questions/9990586
复制相似问题