ObjectDataProviderを使用する
-
11-07-2019 - |
質問
誰もこれに遭遇したとは信じられません。
データの取得と残りのアプリケーションコントロールへの提供を処理するカスタム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プロパティを使用する必要がありますか?
解決
DataSourceController
をリソースとして追加し(パラメーターなしのコンストラクターがない場合は、コードビハインドからこれを行う必要があります)、 ObjectDataProvider.ObjectInstance プロパティを使用して DataSourceController
インスタンス、それでメソッドを実行できます:
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
はリソースを取ることができます:
<ObjectDataProvider ObjectInstance="{StaticResource myDataController}" x:Key="DataSource" MethodName="GetVenues" />
ObjectDataProvider
がApp.xamlにあり、 DataSourceController
リソースを追加する前に解析できる場合、問題が発生する可能性があります。この場合、エラーが発生します。 &quot; myDataController
&quot;リソースはまだ存在しません。
所属していません StackOverflow