Zoeken…


Invoering

Dit voorbeeld laat zien hoe u een ViewModel en een View maakt binnen het MVVM-patroon en WPF, en hoe u de twee aan elkaar kunt binden, zodat elke wordt bijgewerkt wanneer de andere wordt gewijzigd.

Een string in het ViewModel binden aan een TextBox in de View

SampleViewModel.vb

'Import classes related to WPF for simplicity
Imports System.Collections.ObjectModel
Imports System.ComponentModel

Public Class SampleViewModel
    Inherits DependencyObject
    'A class acting as a ViewModel must inherit from DependencyObject
    
    'A simple string property
    Public Property SampleString as String
        Get
            Return CType(GetValue(SampleStringProperty), String)
        End Get
        
        Set(ByVal value as String)
            SetValue(SampleStringProperty, value)
        End Set
    End Property

    'The DependencyProperty that makes databinding actually work
    'for the string above
    Public Shared ReadOnly SampleStringProperty As DependencyProperty = _
                           DependencyProperty.Register("SampleString", _
                           GetType(String), GetType(SampleViewModel), _
                           New PropertyMetadata(Nothing))

End Class

Een DependencyProperty kan eenvoudig worden toegevoegd met behulp van het wpfdp -codefragment (typ wpfdp en druk vervolgens tweemaal op de TAB toets), maar het codefragment is niet type-veilig en compileert niet onder Option Strict On .

SampleWindow.xaml

<Window x:Class="SampleWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:des="http://schemas.microsoft.com/expression/blend/2008"
        DataContext="{Binding}"
        Loaded="Window_Loaded">
    <Grid>
        <TextBox>
            <TextBox.Text>
                <Binding Path="SampleString" />
            </TextBox.Text>
        </TextBox>
    </Grid>
</Window>

SampleWindow.xaml.vb

Class SampleWindow

    Private WithEvents myViewModel As New SampleViewModel()

    Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
        Me.DataContext = myViewModel
    End Sub
End Class

Merk op dat dit een zeer rudimentaire manier is om MVVM en databinding te implementeren. Een meer robuuste praktijk zou zijn om een platform als Unity te gebruiken om het ViewModel in de View te "injecteren".



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow