لم يتم تعيين مرجع الكائن على مثيل لمستودع الكائن
-
22-09-2019 - |
سؤال
أحصل على XamlParseException الذي يتستر بالفعل على استثناء آخر. هنا جزء من Stacktrace:
Message=Object reference not set to an instance of an object.
Source=AssignmentOrganizer
StackTrace:
at AssignmentOrganizer.MainWindow..ctor() in C:\Users\Mohit\Documents\Visual Studio 2010 \Projects\AssignmentOrganizer\AssignmentOrganizer\MainWindow.xaml.cs:line 29
هنا السطر 29:
lvwMain.ItemsSource = _assignmentRepo.ListAssignments();
عندما يكون LVWMain عبارة عن ListView و _AssignmentsRepo هو عبارة عن IASSignmentRepository تم إعلانه مثل:
IAssignmentRepository _assignmentRepo;
هذا هو المكان الذي يحدث فيه الخطأ. أنا أستخدم نمط المستودع أي شخص يرغب في تخمين؟
ها هو xaml الخاص بي:
<Window x:Class="AssignmentOrganizer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="MainWindow" Height="518" Width="755">
<DockPanel>
<Menu DockPanel.Dock="Top">
</Menu>
<ToolBar DockPanel.Dock="Top">
</ToolBar>
<StatusBar DockPanel.Dock="Bottom">
</StatusBar>
<Grid DockPanel.Dock="Left" Width="150">
<Grid.RowDefinitions>
<RowDefinition Height="259*" />
<RowDefinition Height="259*" />
</Grid.RowDefinitions>
</Grid>
<Grid DockPanel.Dock="Right" Width="150">
</Grid>
<Grid>
<ListView x:Name="lvwMain">
<ListView.View>
<GridView>
<GridViewColumn Header="Title" Width="125" />
<GridViewColumn Header="Due" Width="75" />
</GridView>
</ListView.View>
</ListView>
</Grid>
</DockPanel>
المحلول
في مُنشرك ، تأكد من وضعك InitializeComponent
اتصل قبل القيام بأي منطق مُنشئ آخر.
public MainWindow()
{
// Do this first.
InitializeComponent();
// Now do the rest of the constructor.
...
lvwMain.ItemsSource = _assignmentRepo.ListAssignments();
...
}
نصائح أخرى
أعتقد أن المشكلة هي مع الطريقة "ListAssignments ()". بعض العناصر الموجودة في المجموعة التي يتم إرجاعها بواسطة هذه الطريقة خالية ، وعندما تحاول التحكم ربط جميع العناصر (مع توقع أن يكون الجميع غير فارغ) ، فإنه يلقي استثناءً لكائن فارغ.
جرب هذا...
lvwMain.ItemsSource = _assignmentRepo.ListAssignments().where(item=>item!=null).ToList();
من الناحية المثالية ، يجب أن تتجاهل listassignments () الكائنات الفارغة. ولكن يمكنك تجربة هذا للتخلص من الاستثناء.
ستحصل أيضًا على هذا الاستثناء هو أن LVWMAIN فارغ.
يشبه _assignmentRepo
هو null
لأنك لم تكتشفها أبدًا. الخط
IAssignmentRepository _assignmentRepo;
يعلن متغير _assignmentRepo
هذه إشارة إلى كائن ينفذ IAssignmentRepository
لكنه لا يثبت مثل هذا الكائن في الواقع. في مرحلة ما من الكود الخاص بك ، تحتاج إلى سطر مثل
_assignmentRepo = new AssignmentRepository();
أين AssignmentRepository
هو فئة تنفذ IAssignmentRepository
. بالطبع ، يمكنك الإعلان والتأسيس في سطر واحد:
IAssignmentRepository _assignmentRepo = new AssignmentRepository();
هناك خيارات أخرى مثل
_assignmentRepo = RepositoryFactory.CreateRepository<AssignmentRepository>();
هناك طريقة بسيطة للغاية للتحقق من ذلك وهي ضبط نقطة توقف على خط الإساءة ، وبدء تصحيح الأخطاء وتشغيله حتى تضغط على نقطة التوقف ، ثم تحوم الماوس _assignmentRepo
. ثم ستظهر تلميح أدوات صغير ويمكنك معرفة ما إذا كان _assignmentRepo
هو في الواقع null
.
إذا كنت تحذف التفاصيل وكنت قد تم تعيينك في الواقع بالتأكيد _assignmentRepo
ثم الاحتمال الآخر الوحيد هو ذلك lvmMain
باطل. لم تمنحنا معلومات كافية لاستنتاج لماذا قد يكون هذا هو الحال.