Frage

Ich kann nicht glauben, dass niemand über diese bekommen oder vielleicht bin ich nur etwas fehlt.

Ich habe eine benutzerdefinierte DataSourceController bekam die Daten verarbeitet abgerufen und auf dem Rest der Anwendung Bedienelemente. Natürlich nutzt SQL-Verbindung, die ich auch initialisieren.

Mein App-Code:

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

Jetzt möchte ich Object in XAML erstellen und dann verwenden, um Daten in der Kontrollgruppe Bindung:

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

Das Problem ist, dass die DataSourceController nicht einen parameterlosen Konstruktor haben und erfordern ein OracleSQLConnection Objekt in übergeben werden.

(die in meiner App-Code-behind ein öffentliches Eigentum)

Ist das überhaupt möglich? Oder ich habe Zuflucht in-Code Datacontext-Eigenschaft auf die Verwendung für jede Kontrolle Ich möchte Daten binden?!

War es hilfreich?

Lösung

Sie können die DataSourceController als Ressource hinzufügen (Sie werden dies tun müssen, um aus dem Code-behind, wenn Sie nicht über einen parameterlosen Konstruktor haben), um die ObjectDataProvider.ObjectInstance Eigenschaft die DataSourceController Instanz zu erhalten, führen Sie können dann Methoden auf sie:

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 kann eine Ressource nehmen:

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

Es könnte Probleme, wenn Ihr ObjectDataProvider in App.xaml ist, wo es analysiert werden konnte, bevor die DataSourceController Ressource hinzugefügt wird, wobei in diesem Fall eine Fehlermeldung ausgegeben würde, weil die „myDataController“ Ressourcen würden noch nicht existieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top