WPF MVVM VB.Net多视图应用程序

时间:2017-06-30 12:48:19

标签: wpf vb.net mvvm multiple-views

帮助!已经过了一周,我开始尝试在VB.NET中构建一个MVVM应用程序。不幸的是,98%的文档都是面向C#的。我找到了一些线索,但我仍然没有得到所有的答案......

我想做什么: 具有3个视图的应用程序:loginView,View1和View2。如果没有用户连接,则显示loginView(可以)。当用户连接时,我应该加载View1或View2关于他的权限。

应该很简单,但由于我几乎找不到这个拼图的碎片,我几乎失去了所有的头发......

第一期: 在loginView中如何检查用户凭据? 由于我无法将任何属性绑定到PasswordBox,我发现有些文档说我应该这样做:

<Button x:Name="btnLogin" Content="Log in"
                Command="{Binding Path=AuthenticateUser}"
                CommandParameter="{Binding ElementName=txtPassword}"/>

但如果我设法执行一个没有参数的命令,我就无法找到如何执行命令WITH参数。有什么简单的想法吗?

要从按钮运行命令,我使用在那里找到的relayCommand类:Implementing RelayCommand (MVVM) in VB.NET: Syntax problems

所以我定义了一个这样的属性:

    Dim _relayCmd As New RelayCommand(AddressOf Authentication)
    Public ReadOnly Property AuthenticateUser As ICommand
        Get
            Return _relayCmd
        End Get
    End Property

    ' Authentication method
    Private Sub Authentication(ByVal _passwordBox As PasswordBox)

        'do something...
    End Sub

第二期: 用户连接后,我如何切换到View1或View2?我读了一些文档说我应该使用一个可观察的观点收集并浏览它。但我应该更改MainWindowView的datacontext。仍然没有在VB中找到正确的方法。

我不希望你为我做一切,而是希望找到一个简单的教程,可以清楚地解释它在VB中是如何工作的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以将命令参数强制转换为PasswordBox

Dim _relayCmd As New RelayCommand(AddressOf Authentication, Function(obj As Object)
Return True
End Function)
Public ReadOnly Property AuthenticateUser As ICommand
    Get
        Return _relayCmd
    End Get
End Property

Private Sub Authentication(ByVal _passwordBox As Object)
    Dim passwordBox = TryCast(_passwordBox, PasswordBox)
    'do something...
End Sub

至于你的第二个问题,你没有提供足够的细节。但如果您有其他问题,请提出另一个问题。