Mit Object
-
11-07-2019 - |
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?!
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.