usando ObjectDataProvider
-
11-07-2019 - |
Pergunta
Eu não posso acreditar que ninguém tem obtido através deste ou talvez eu só estou faltando alguma coisa.
Eu tenho um DataSourceController costume que alças recuperação de dados e fornecendo-lo para o resto dos controles de aplicativos. Naturalmente, ele usa conexão sql que eu também initialize.
código My App:
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);
}
Agora eu quero criar ObjectDataProvider em XAML e, em seguida, usá-lo para a ligação de dados em controles:
<ObjectDataProvider ObjectType="{x:Type data:DataSourceController}" x:Key="DataSource" MethodName="GetVenues" />
O problema é que o DataSourceController não tem um construtor sem parâmetros e requer um objeto OracleSQLConnection a ser passado em (que é uma propriedade pública em meu aplicativo de código-behind).
É este for possível? Ou eu tenho que recorrer ao uso de in-código da propriedade DataContext para cada controle Quero dados-bind?!
Solução
Você pode adicionar o DataSourceController
como um recurso (você vai ter que fazer isso a partir do código-behind, se você não tem um construtor sem parâmetros) e usar o ObjectDataProvider.ObjectInstance propriedade para obter a instância DataSourceController
, então você pode executar métodos sobre ele:
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
pode tomar um recurso:
<ObjectDataProvider ObjectInstance="{StaticResource myDataController}" x:Key="DataSource" MethodName="GetVenues" />
Pode haver problemas se o seu ObjectDataProvider
está em App.xaml onde poderia ser analisado antes do recurso DataSourceController
é adicionado, caso em que você deseja obter um erro porque os recursos "myDataController
" não existe.