Привязка UserControl к ViewModel (Caliburn Micro WPF) - PullRequest
1 голос
/ 25 апреля 2019

Я создаю форму входа, которая будет использоваться многими различными приложениями.Логин всегда будет иметь одинаковую логику, поэтому я бы хотел привязать модель представления и выполнить всю логику там (получение информации о логине из базы данных и т. Д.).Я создал новые UserControl, MainView и ViewModel MainViewModel, которые оба находятся в пространстве имен Login.

Форма продолжает выполнять все, что находится в коде, но ничего в ВМ.Есть ли другой способ связывания, о котором я не знаю?

Код позади 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()

1 Ответ

1 голос
/ 25 апреля 2019

Поскольку вы создаете окно в явном виде, вам также необходимо явно установить его 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}"
...