باستخدام ObjectDataProvider
-
11-07-2019 - |
سؤال
وأنا لا أستطيع أن أصدق أن أحدا قد حصلت عبر هذا أو ربما أنا مجرد شيء مفقود.
ولقد حصلت على العرف DataSourceController الذي يتعامل مع استرجاع البيانات وتوفيرها لبقية الضوابط التطبيق. وبطبيعة الحال، فإنه يستخدم اتصال SQL التي أنا أيضا تهيئة.
وبلدي التطبيقات كود:
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);
}
والآن أريد إنشاء ObjectDataProvider في XAML ثم استخدامه لربط البيانات في الضوابط:
<ObjectDataProvider ObjectType="{x:Type data:DataSourceController}" x:Key="DataSource" MethodName="GetVenues" />
والمشكلة هي أن DataSourceController لايوجد منشئ parameterless ويتطلب كائن OracleSQLConnection لتمريرها في (وهو الممتلكات العامة في بلدي التطبيقات التعليمات البرمجية الخلفية).
هل هذا ممكن على الإطلاق؟ أو لا بد لي من اللجوء إلى استخدام في قانون الملكية DataContext لكل عنصر تحكم أريد إلى ربط البيانات؟!
المحلول
ويمكنك إضافة DataSourceController
كمورد (سيكون لديك للقيام بذلك من التعليمات البرمجية الخلفية إذا لم يكن لديك منشئ parameterless) واستخدام في ObjectDataProvider.ObjectInstance الخاصية للحصول على سبيل المثال DataSourceController
، ثم يمكنك تنفيذ الأساليب على ما يلي:
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
يمكن أن يستغرق والموارد:
<ObjectDataProvider ObjectInstance="{StaticResource myDataController}" x:Key="DataSource" MethodName="GetVenues" />
وربما تكون هناك مشكلات إذا ObjectDataProvider
الخاص بك هو في App.xaml حيث يمكن توزيعه قبل إضافة المورد DataSourceController
، وفي هذه الحالة كنت تحصل على خطأ لان الموارد "myDataController
" لا يوجد حتى الآن.