Aquí podría ser tu PUBLICIDAD


Usando ObjectDataProvider

votos
3

No puedo creer que nadie haya pasado por esto o que me esté perdiendo algo.

Tengo un DataSourceController personalizado que maneja la recuperación de datos y proporcionarlos al resto de los controles de la aplicación. Naturalmente, usa la conexión sql que también inicializo.

Mi código de aplicación:

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);
}

Ahora quiero crear ObjectDataProvider en XAML y luego usarlo para vincular datos en controles:

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

El problema es que DataSourceController no tiene un constructor sin parámetros y requiere que se pase un objeto OracleSQLConnection (que es una propiedad pública en mi código de aplicación detrás).

¿Es esto posible? ¿O tengo que recurrir al uso de la propiedad DataContext en código para cada control al que quiero enlazar datos?

Publicado el 12/03/2009 a las 15:38
fuente por usuario Alexandra
En otros idiomas...        العربية       

1 respuestas

votos
5

Puede agregar el DataSourceControllercomo recurso (tendrá que hacer esto desde el código subyacente si no tiene un constructor sin parámetros) y usar la propiedad ObjectDataProvider.ObjectInstance para obtener la DataSourceControllerinstancia, luego puede ejecutar métodos en ella:

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 puede tomar un recurso:

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

Puede haber problemas si ObjectDataProviderestá en App.xaml, donde podría analizarse antes de DataSourceControlleragregar el recurso, en cuyo caso obtendría un error porque los myDataControllerrecursos " " aún no existirían.

Respondida el 12/03/2009 a las 05:47
fuente por usuario Robert Macnee


Aquí podría ser tu PUBLICIDAD