WPF DependencyProperty

바위게·2024년 2월 14일

WPF

목록 보기
5/8

DependencyProperty
의존 프로퍼티

public static DependencyProperty Register(string name, Type propertyType, Type ownerType);
  • name: xaml에 표시할 속성의 이름이자 프로퍼티 이름
  • propertyType: 프로퍼티의 반환타입
  • ownerType: xaml에서 해당 프로퍼티를 사용할 수 있는 타입 지정

그래서 아래는
u_DataView라는 타입에서 DataTable타입의 DataViewSource라는 프로퍼티를 생성한 것이다.

MainWindow.xaml

<igDock:SplitPane x:Name="DockedTop" igDock:XamDockManager.InitialLocation="DockedTop" Height="300">
	<igDock:ContentPane x:Name="DataDock" Header="DataView">
		<v:u_DataView x:Name="DataView" DataViewSource="{Binding DataSource}" />
	</igDock:ContentPane>
</igDock:SplitPane>

DataView.xaml.CS

public static readonly DependencyProperty DataProperty =
            DependencyProperty.Register("DataViewSource", typeof(DataTable), typeof(u_DataView));

        public DataTable DataViewSource
        {
            get { return (DataTable)GetValue(DataProperty); }
            set
            {
                SetValue(DataProperty, value);
                Console.WriteLine("Data Init");
            }
        }

DataView.xaml

  <Grid>
        <igDp:XamDataGrid  x:Name="DataViewGrid" Background="Gray"  
                            DataSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:u_DataView}}, Path=DataViewSource, Mode=OneWay}">
  <Grid>

MainViewModel

        private DataTable dataViewSource;
        public DataTable DataSource
        {
            get
            {
                return dataViewSource;
            }
            set
            {
                dataViewSource = value;
                OnPropertyChanged("DataSource");
            }
        }

MainWindow가 존재하고
DataView를 UserControl로 생성하였다.
Infragitics의 DockManager를 사용하여 만들던 중
MainViewModel에서 DataView에게 DataSource를 전달해주어야 하는 상황이였는데
처음에는 x:Name="DataView"를 사용하여
MainViewModel에서 DataView를 참조하여 거기서 DataSource를 전달해줬다.
그러다가 의존프로퍼티에 대해 알게되고

profile
게임하는만큼만 개발공부하자

0개의 댓글