将 UserControl 绑定到 ViewModel(Caliburn Micro WPF)
Binding UserControl to ViewModel (Caliburn Micro WPF)
我正在创建一个将被许多不同应用程序使用的登录表单。登录将始终具有相同的逻辑,因此我想绑定一个视图模型并在那里执行所有逻辑(从数据库中检索登录信息等)。我创建了一个新的 UserControl
、MainView
和一个 ViewModel,MainViewModel
它们都在 Login
命名空间中。
表单继续 运行 代码隐藏中的所有内容,但 VM 中没有任何内容。
还有其他我不知道的绑定方式吗?
代码隐藏 MainView.Xaml.vb
Imports Caliburn.Micro
Namespace Login
Public Class MainView
Public Sub New()
MsgBox("TEST code-behind")
End Sub
End Class
End Namespace
VM MainViewModel.vb
Imports Caliburn.Micro
Namespace Login
Public Class MainViewModel
Inherits PropertyChangedBase
Public Sub New()
MsgBox("TEST ViewModel")
End Sub
End Class
End Namespace
Xaml
<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)
... >
编辑
这就是我在用户登录之前将 UserControl
添加为单独的 window 的方式,我可以看到内容,但是 ViewModel 绑定 none 中的属性
Dim login As New Window
With login
.WindowStyle = WindowStyle.None
.ResizeMode = ResizeMode.NoResize
.SizeToContent = SizeToContent.WidthAndHeight
.Content = New MainView()
End With
login.ShowDialog()
由于您正在显式创建 window,因此您还需要显式设置其 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}"
我正在创建一个将被许多不同应用程序使用的登录表单。登录将始终具有相同的逻辑,因此我想绑定一个视图模型并在那里执行所有逻辑(从数据库中检索登录信息等)。我创建了一个新的 UserControl
、MainView
和一个 ViewModel,MainViewModel
它们都在 Login
命名空间中。
表单继续 运行 代码隐藏中的所有内容,但 VM 中没有任何内容。 还有其他我不知道的绑定方式吗?
代码隐藏 MainView.Xaml.vb
Imports Caliburn.Micro
Namespace Login
Public Class MainView
Public Sub New()
MsgBox("TEST code-behind")
End Sub
End Class
End Namespace
VM MainViewModel.vb
Imports Caliburn.Micro
Namespace Login
Public Class MainViewModel
Inherits PropertyChangedBase
Public Sub New()
MsgBox("TEST ViewModel")
End Sub
End Class
End Namespace
Xaml
<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)
... >
编辑
这就是我在用户登录之前将 UserControl
添加为单独的 window 的方式,我可以看到内容,但是 ViewModel 绑定 none 中的属性
Dim login As New Window
With login
.WindowStyle = WindowStyle.None
.ResizeMode = ResizeMode.NoResize
.SizeToContent = SizeToContent.WidthAndHeight
.Content = New MainView()
End With
login.ShowDialog()
由于您正在显式创建 window,因此您还需要显式设置其 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}"