سؤال

وأنا لا أستطيع أن أصدق أن أحدا قد حصلت عبر هذا أو ربما أنا مجرد شيء مفقود.

ولقد حصلت على العرف 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" لا يوجد حتى الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top