2009-03-12 3 views
3

아무도이 문제를 해결하지 못했거나 뭔가 누락되었다고 생각할 수 없습니다.ObjectDataProvider 사용

데이터를 검색하고 나머지 응용 프로그램 컨트롤에 제공하는 사용자 지정 DataSourceController가 있습니다. 당연히, 그것은 또한 내가 초기화하는 SQL 연결을 사용합니다.

내 응용 프로그램 코드 :

private ISQLConnection conn; 
public ISQLConnection SqlConnection { get { return conn; } } 

private DataSourceController dataSource; 
public DataSourceController DataSource { get { return dataSource; } } 

protected override void OnStartup(StartupEventArgs e) { 
    //------------------------------------------------------- 
    // Initialize connections 
    conn = new OracleSQLConnection("connectionStringHere"); 

    //------------------------------------------------------- 
    // Initialize controllers 
    //dataSource = new DataSourceController(conn); 

    base.OnStartup(e); 
} 

가 지금은 XAML에서 ObjectDataProvider을 생성하고 컨트롤에 데이터 바인딩을 사용하려면 :

<ObjectDataProvider ObjectType="{x:Type data:DataSourceController}" x:Key="DataSource" MethodName="GetVenues" /> 

문제는 DataSourceController가없는 것입니다 매개 변수없는 생성자이며 OracleSQLConnection 객체가 전달되어야합니다 (내 App 코드 숨김의 공용 속성 임).

이 모든 것이 가능합니까? 또는 데이터 바인딩하려는 각 컨트롤에 대해 코드 내 DataContext 속성을 사용해야합니다.

답변

5

당신은 리소스로 DataSourceController을 추가 할 수 있습니다 (당신은 당신이 매개 변수없는 생성자가없는 경우 코드 숨김에서이 ​​작업을 수행해야합니다) 그리고, 다음 방법을 실행할 수있는 DataSourceController 인스턴스를 얻기 위해 ObjectDataProvider.ObjectInstance 속성을 사용하여 당신의 ObjectDataProvider이는전에 구문 분석 할 수 App.xaml에있는 경우

<ObjectDataProvider ObjectInstance="{StaticResource myDataController}" x:Key="DataSource" MethodName="GetVenues" /> 

가있을 수 있습니다 문제 : 그것에 :

private ISQLConnection conn; 
public ISQLConnection SqlConnection { get { return conn; } } 

private DataSourceController dataSource; 
public DataSourceController DataSource { get { return dataSource; } } 

protected override void OnStartup(StartupEventArgs e) { 
    //------------------------------------------------------- 
    // Initialize connections 
    conn = new OracleSQLConnection("connectionStringHere"); 

    //------------------------------------------------------- 
    // Initialize controllers 
    dataSource = new DataSourceController(conn); 
    this.Resources.Add("myDataController", dataSource); 
    base.OnStartup(e); 
} 

ObjectInstance 리소스를 취할 수 있습니다 0 리소스가 추가되었습니다.이 경우 "myDataController"리소스가 아직 존재하지 않으므로 오류가 발생합니다.

+0

감사합니다. Robert! 나는 이것을 시험해 보았다. 그런 다음 나는 더 이상 문제가없는 (관련없는) 문제가 있었지만 코드 내에서 init을 선택 해제 한 다음 객체를 내 윈도우의 DataContext로 설정해야했습니다. – Alexandra