2009-03-12 5 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オブジェクト(アプリケーションコードビハインド内のパブリックプロパティ)が必要です。

これはすべて可能ですか?または、私はデータバインドしたい各コントロールのコード内の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

関連する問題