CHashtag

[C#] [WPF] MultiBinding StringFormat (여러개 동시 바인딩) 본문

C#/WPF

[C#] [WPF] MultiBinding StringFormat (여러개 동시 바인딩)

HyoSeong 2021. 2. 21. 19:35
반응형

안녕하세요.

오늘은 하나의 Property에 여러 값을 동시에 Binding 하는 MultiBinding에 대해 알아보도록 하겠습니다.

(Converter에 대한 설명은 다른 게시글로 정리하겠습니다.)

 

코드에 대한 설명은 주석으로 달아놓았으니 참고 바랍니다.

<!-- MainWindow.xaml -->
<Window x:Class="WPF_MultiBinding_StringFormat.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:WPF_MultiBinding_StringFormat"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <!-- 하나만 바인딩 할 때에는 별도의 Tag로 분리해서 사용할 필요가 없습니다. -->
        <TextBlock Text="{Binding Path=Height, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"/>
        
        <!-- 하지만 MultiBinding의 경우 Attribute안에 넣을 수 없어서 (Binding의 배열이 들어가서) 별도의 Tag로 분리해서 작성해야 합니다. -->
        <TextBlock>
            <TextBlock.Text>
                <!-- StringFormat의 앞에 {} 을 넣어주는 이유는 XAML 마크업 확장을 나타내기 위해서입니다. -->
                <MultiBinding StringFormat="{}{0}, {1}">
                    <Binding Path="Height" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}"/>
                    <Binding Path="Width" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}"/>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>

        <TextBlock>
            <TextBlock.Text>
                <!-- 바로 Formatting 문자열이 나오지 않는다면 {}를 넣어주지 않아도 무관합니다. -->
                <MultiBinding StringFormat="Height: {0}, Width: {1}">
                    <Binding Path="Height" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}"/>
                    <Binding Path="Width" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}"/>
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </Grid>
</Window>

 

감사합니다.

반응형