将UserControl绑定到ViewModel(Caliburn Micro WPF)

时间:2019-04-25 12:44:18

标签: wpf vb.net user-controls caliburn.micro

我正在创建一个登录表单,该表单将被许多不同的应用程序使用。登录将始终具有相同的逻辑,因此我想绑定一个视图模型并在那里执行所有逻辑(从数据库中检索登录信息,等等)。我创建了一个新的UserControlMainView和一个ViewModel,它们都位于MainViewModel命名空间中。

该窗体将继续运行其背后的代码中的所有内容,但不会在VM中运行任何内容。 还有我不知道的另一种绑定方式吗?

Login背后的代码

MainView.Xaml.vb

VM Imports Caliburn.Micro Namespace Login Public Class MainView Public Sub New() MsgBox("TEST code-behind") End Sub End Class End Namespace

MainViewModel.vb

Xaml

Imports Caliburn.Micro

Namespace Login
    Public Class MainViewModel
        Inherits PropertyChangedBase

        Public Sub New()
            MsgBox("TEST ViewModel")
        End Sub

    End Class
End Namespace

编辑 这就是我在用户登录之前将<UserControl x:Class="Login.MainView" xmlns:cal="http://www.caliburnproject.org" xmlns:local="clr-namespace:cLogin.Login" cal:Bind.Model="cLogin.Login.MainViewModel" (not sure if needed due to naming) ... > 作为单独的窗口添加的方式,我可以看到内容,但是ViewModel绑定中没有任何属性

UserControl

1 个答案:

答案 0 :(得分:1)

由于要显式创建窗口,因此还需要显式设置其DataContext

Dim login As New Window
    With login
        .WindowStyle = WindowStyle.None
        .ResizeMode = ResizeMode.NoResize
        .SizeToContent = SizeToContent.WidthAndHeight
        .Content = New MainView()
        .DataContext = New MainViewModel()
End With

您还应该在视图中将附加的Bind.Model属性绑定到DataContext

cal:Bind.Model="{Binding}"