2012-05-21 5 views
0

저는 WPF 프로젝트에서 작업 중이며 일부 사용자 컨트롤을 만들어야합니다. 지금은 DataGrid를 탐색 할 수있는 탐색 바를 개발 중이므로 XAML 파일에서 탐색 막대에 DataGrid 객체를 전달해야하지만 작동하지 않습니다.WPF에서 컨트롤에 컨트롤을 전달하는 방법?

내 네비게이션 바는 다음

<my:NavigationBar Data="{Binding ElementName=dataGrid1}" HorizontalAlignment="Left" Margin="6,6,0,0" Name="navigationBar1" VerticalAlignment="Top" /> 

그리고 내 데이터 그리드는 다음과 같습니다 :

<DataGrid AutoGenerateColumns="True" Margin="11,46,12,9" Name="dataGrid1" /> 

그리고 내 탐색 모음 뒤에 내 코드는 다음과 같습니다 :

public static readonly DependencyProperty dataProperty = 
     DependencyProperty.Register("Data", 
            typeof(DataGrid), typeof(NavigationBar)); 

    private DataGrid dataGrid; 
    public DataGrid Data 
    { 
     get 
     { return dataGrid; } 
     set 
     { dataGrid = value; } 
    } 

보시다시피,이 작업을 수행하여 탐색 모음에 컨트롤을 보내려고합니다 :

Data="{Binding ElementName=dataGrid1}" 

그러나 내 코드에서 dataGrid 변수를 사용하려고하면 dataGrid 변수가 null을 가리키기 때문에 예외가 발생합니다.

그래서 컨트롤을 잘못 전달하고 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까? 내 접근 방식이 가장 적절합니까?

미리 감사드립니다.

답변

0

내가 처리 할 수있는 더 좋은 방법이있을 것이라고 Andriy가 동의하지만 종속성 속성을 수행하는 방식에 문제가 있습니다.

DependencyProperty의 뒷면 속성이 올바르지 않습니다. 당신은 단지 정기적 인 가치를 얻고 설정하기로되어 있지 않습니다. 대신 SetValue 및 GetValue 메서드를 사용해야합니다.

은 다음과 같아야합니다

public DataGrid Data 
    { 
     get 
     { return (DataGrid) GetValue(dataProperty); } 
     set 
     { SetValue(dataProperty); } 
    } 

참조 : yur 답장을 http://www.wpftutorial.net/DependencyProperties.html

+0

작동합니다! 고맙습니다! 더 나은 접근 방법을 찾고자합니다. – Dante

1

DataGrid는 사람이 읽을 수있는 방식으로 데이터를 표시하기위한 것이므로 DataSource를 컨트롤에 전달하면 안됩니다. 내비게이션 막대 양식을 DataGrid1과 동일한 데이터 소스 양식에 바인딩 해보십시오.

+0

감사합니다. 그러나 실제로 사용자가보고있는 데이터를 탐색해야합니다. 그럼에도 불구하고 그렇게해야합니까? – Dante

+0

나에 관해서는 - DataGrid1의 DataSource를 사용하고 싶습니다. –

+0

@ Andriy.Zakharko를 사용해 보았습니다. 그러나 메소드 또는 데이터 그리드의 데이터 소스를 반환하는 속성을 찾지 못했습니다. WPF의 새로운 기능. 내가 어떻게 데이터 소스를 얻을 수 있는지 아십니까? – Dante

관련 문제