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?!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top