将UserControl绑定到ViewModel(Caliburn Micro WPF)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将UserControl绑定到ViewModel(Caliburn Micro WPF)相关的知识,希望对你有一定的参考价值。

我正在创建一个将由许多不同的应用程序使用的登录表单。登录将始终具有相同的逻辑,因此我想绑定一个viewmodel并在那里执行所有逻辑(从数据库中检索登录信息等)。我创建了一个新的UserControlMainView和一个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添加为单独窗口的方式,我可以看到内容,但ViewModel中没有任何属性绑定

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

login.ShowDialog()
答案

由于您是显式创建窗口,因此还需要显式设置其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绑定到ViewModel(Caliburn Micro WPF)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 WPF DataGrid DataColumns 可见性绑定到 UserControl 的 ViewModel 上的属性?

将 ViewModel 的属性绑定到 UserControl 的子控件和自身的 DependencyProperty

DataContext 用于在 DataTemplate 中将 UserControl 与 ViewModel 绑定

将 UserControl ListBox ItemSsource 绑定到父 DataContext 时出错

通过 MVVM 模式创建 UserControl - DataContext 并绑定到父级

如何使用ViewModel为UserControl设置DataBinding