Domanda

Non riesco a credere che nessuno l'abbia superato o forse mi sto perdendo qualcosa.

Ho un DataSourceController personalizzato che gestisce il recupero dei dati e li fornisce al resto dei controlli dell'applicazione. Ovviamente, utilizza la connessione SQL che anch'io inizializzo.

Codice app personale:

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

Ora voglio creare ObjectDataProvider in XAML e quindi usarlo per associare i dati nei controlli:

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

Il problema è che DataSourceController non ha un costruttore senza parametri e richiede il passaggio di un oggetto OracleSQLConnection (che è una proprietà pubblica nella mia app code-behind).

È possibile? O devo ricorrere all'uso della proprietà DataContext nel codice per ogni controllo che voglio associare ai dati ?!

È stato utile?

Soluzione

Puoi aggiungere DataSourceController come risorsa (dovrai farlo da code-behind se non hai un costruttore senza parametri) e usare ObjectDataProvider.ObjectInstance per ottenere la proprietà DataSourceController istanza, quindi puoi eseguire i metodi su di essa:

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 può prendere una risorsa:

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

Potrebbero esserci problemi se ObjectDataProvider si trova in App.xaml dove potrebbe essere analizzato prima dell'aggiunta della risorsa DataSourceController , nel qual caso si otterrebbe un errore perché il " myDataController " le risorse non esisterebbero ancora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top