XAML 내에서 DataContext 속성에 IntelliSense가 작동하도록 설정

WPF와 같은 MVVM 앱을 만들 때 ViewModel을 View의 DataContext 속성으로 설정합니다.

여기에서는 아래와 같은 View와 ViewModel이 있다고 가정합니다.

ViewModel.cs
namespace WpfTest
{
    class ViewModel
    {
        public string ViewModelText => "Test String";
    }
}

MainWindow.xaml
<Window x:Class="WpfTest.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:WpfTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBlock FontSize="50" Text="{Binding ViewModelText}"/>
    </Grid>
</Window>

이 때, {Binding ViewModelText} 의 개소는 보완이 효력 없이 수타할 필요가 있습니다.
모처럼 Visual Studio라고 하는 고기능인 IDE를 사용하고 있는데 철자 미스등 하고 있으면 아깝습니다.

그래서 XAML 에디터 내에서 인텔리센스를 활성화할 수 있는 두 가지 방법이 있습니다.

① XAML 내에서 DataContext 작성



MainWindow.xaml
<Window x:Class="WpfTest.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:WpfTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:ViewModel/>
    </Window.DataContext>
    <Grid>
        <TextBlock FontSize="50" Text="{Binding ViewModelText}"/>
    </Grid>
</Window>
<local:ViewModel/><local:ViewModel x:Name="vm"/> 등으로 하면 코드 숨김에서 vm이라는 변수를 사용할 수도 있습니다.

이 방법이라면 ViewModel이 인수없는 생성자를 가져야한다거나 DataContext의 자유도가 그다지 높지 않습니다.
이 경우 다음 방법을 사용합니다.

②디자인용 설정 추가



MainWindow.xaml
<Window x:Class="WpfTest.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:WpfTest"
        mc:Ignorable="d"
        d:DataContext="{d:DesignInstance local:ViewModel}"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBlock FontSize="50" Text="{Binding ViewModelText}"/>
    </Grid>
</Window>

이쪽은 d:DataContext="{d:DesignInstance local:ViewModel}" 라고 덧붙였습니다.d: 는 설계용 설정으로 빌드시에는 무시되므로, 별도 DataContext 를 설정할 필요가 있습니다.

이쪽이 자유도가 높아집니다.

또한 인수가없는 생성자가 있다면d:DataContext="{d:DesignInstance local:ViewModel, IsDesignTimeCreatable=True}"그렇게 하면 실제로 인스턴스를 만든 상태에서의 표시도 볼 수 있습니다.

IntelliSense가 작동하는 상태에서 편안하게 XAML을 작성하십시오.

좋은 웹페이지 즐겨찾기