Pregunta

No puedo creer que nadie haya superado esto o tal vez solo me estoy perdiendo algo.

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

Código de mi 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 los controles:

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

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

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

¿Fue útil?

Solución

Puede agregar el DataSourceController como recurso (deberá hacerlo desde el código subyacente si no tiene un constructor sin parámetros) y usar el ObjectDataProvider.ObjectInstance para obtener la propiedad DataSourceController instancia, entonces puede ejecutar métodos en él:

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 su ObjectDataProvider está en App.xaml, donde podría analizarse antes de agregar el recurso DataSourceController , en cuyo caso obtendría un error porque el " myDataController " los recursos aún no existirían.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top