سؤال

أحصل على 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 باطل. لم تمنحنا معلومات كافية لاستنتاج لماذا قد يكون هذا هو الحال.

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