CODEKILLER

반응형

▶ BindingProxy.cs

바인딩하려는 대상이 기본으로 사용되는 DataContext가 아닐 경우,

또 다른 DataContext나 모델객체를 View에서 사용해야 할 경우가 종종 있습니다. 

 

이럴 경우 BindingProxy의 Data에 View에서 StaticResource로 사용하고자 하는

 DataContext를 지정해 두고 접근하여 바로 사용이 가능합니다. 

 

때로는 DataContext의 길어지는 참조식을 짧게 사용할 수 있는 장점도 있습니다.

public class BindingProxy : Freezable
{
    protected override Freezable CreateInstanceCore()
    {
        return new BindingProxy();
    }

    public object Data
    {
        get { return (object)GetValue(DataProperty); }
        set { SetValue(DataProperty, value); }
    }

    public static readonly DependencyProperty DataProperty =
        DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
}

▶ Xaml에서 사용

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:a="clr-namespace:WPF_Project"
             mc:Ignorable="d"
             d:DesignHeight="300"
             d:DesignWidth="500">
    <UserControl.Resources>
        <!-- BindingProxy의 Data에 특정 DataContext 적용 -->
        <a:BindingProxy x:Key="proxy" Data="{Binding}" />
    </UserControl.Resources>
    
    <!-- BindingProxy의 Data를 StaticResource로 바로 사용할 수가 있습니다. -->
    <CheckBox IsChecked="{Binding Data.IsChecked, Source={StaticResource proxy} }" />
</UserControl>

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band