▶ 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>