首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RelayCommand commandParameter为空

RelayCommand commandParameter为空
EN

Stack Overflow用户
提问于 2012-04-03 17:31:15
回答 2查看 1.3K关注 0票数 1

我的用户控件上有一个按钮

代码语言:javascript
复制
<Button Grid.Row="13" Grid.Column="7" Content="Save" Name="btnSave" 
            CommandParameter="{Binding CompanyDetails}"
            Command="{Binding SaveCommand}" />

SaveCommand是在ViewModel中声明的RelayCommand。CompanyDetails是同一ViewModel中的属性。上面提到的ViewModel是我的UserControl的数据上下文。

代码语言:javascript
复制
    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。我该在哪里犯错呢?非常感谢你的回答。

EN

回答 2

Stack Overflow用户

发布于 2012-04-03 17:44:35

在CompanyViewModel的构造器中,用GetCompanyDetails函数填充CompanyDetails。如下所示更改构造函数,

代码语言:javascript
复制
Public Sub New()
    _myData = New DataFromDatabase(My.Settings.ConnectionString)
    _saveCommand = New RelayCommandWithParameter(New Action(Of Object)(AddressOf SaveIt))
    _companyDetails = GetCompanyDetails()  
End Sub

这可能会有帮助。祝好运。

票数 0
EN

Stack Overflow用户

发布于 2012-04-03 18:57:26

我做VB已经有一段时间了,我从来没有用过WPF,但我想我知道你的问题是什么了。

在初始化命令的方式中,实际上并没有传入参数。

当我在c#中这样做时,它看起来像这样的=>

代码语言:javascript
复制
_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方法传递一个参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9990586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档