Szukaj…


Wprowadzenie

W tym przykładzie pokazano, jak utworzyć ViewModel i widok we wzorcu MVVM i WPF, a także jak powiązać oba ze sobą, aby każdy z nich był aktualizowany za każdym razem, gdy zmienia się drugi.

Wiązanie łańcucha w ViewModel z TextBox w widoku

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

DependencyProperty można łatwo dodać za pomocą fragmentu kodu wpfdp (wpisz wpfdp , a następnie naciśnij dwukrotnie klawisz TAB ), jednak fragment kodu nie jest bezpieczny i nie będzie można go skompilować w 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

Zauważ, że jest to bardzo podstawowy sposób implementacji MVVM i wiązania danych. Bardziej solidną praktyką byłoby użycie platformy takiej jak Unity do „wstrzyknięcia” ViewModel do View.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow