rksoftware

Visual Studio とか C# とかが好きです

UWP で XAML で ViewModel を指定する

UWP で XAML で ViewModel を指定する際に WPF とほんの少し違ったので。

■ WPF の場合

ViewModel のクラスが名前空間 WpfApp1.ViewModelsMainPageViewModel として作っているとします。その場合 XAML で Window の属性に

xmlns:vm="clr-namespace:WpfApp1.ViewModels"

などと書くと指定することができるようになります。
ViewModel を指定するには

<Window.DataContext>
    <vm:MainPageViewModel/>
</Window.DataContext>

などとします。

全体としては

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:vm="clr-namespace:WpfApp1.ViewModels"
        mc:Ignorable="d"
        Title="MainWindow">
    <Window.DataContext>
        <vm:MainPageViewModel/>
    </Window.DataContext>

    <Grid>
        <TextBlock Text="{Binding MyProperty}"/>
    </Grid>
</Window>

といった感じです。

■ UWP の場合

clr-namespace ではなく using でした。

xmlns:vm="using:App1.ViewModels"

ViewModel を指定する場所は

<Window.DataContext>
    <vm:MainPageViewModel/>
</Window.DataContext>

と特に変わりません。

全体としては

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:vm="using:App1.ViewModels"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Page.DataContext>
        <vm:MainPageViewModel/>
    </Page.DataContext>

    <Grid>
        <TextBlock Text="{Binding MyProperty}"/>
    </Grid>
</Page>

かんたんですね。