Именованные элементы в XAML не существуют в текущем контексте - PullRequest
0 голосов
/ 05 марта 2020

Я работаю над школьным проектом, и мне нужно связать элементы между моим XAML и C# кодом. Я определил имена в файле XAML, но код C# сообщает, что некоторые элементы «не существуют в текущем контексте». Переменные в C# с этой ошибкой:

StartDatePicker
EndDatePicker
InstructorName
InstructorEmail
InstructorPhone

Я заменил эти элементы путем копирования и вставки полей x: Name из файла XAML, очистил все файлы и перестроил решение, но я все еще получаю сообщение об ошибке.

затронутые C# кодовые блоки:

public CourseInfoPage(Courses selectedCourse)
        {
            InitializeComponent();
            thisCourse = selectedCourse;
            courseId = thisCourse.Id;
            int courseInstructorId = thisCourse.Instructor;
            GetCourseInstructor(courseInstructorId);
            StartDatePicker.Date = thisCourse.RealStartDate;
            EndDatePicker.Date = thisCourse.RealEndDate;
        }
private void GetCourseInstructor(int courseInstructorId)
        {
            using (SQLiteConnection conn = new SQLiteConnection(App.DBLocation))
            {
                var instructorName = conn.Query<Instructors>($"SELECT FirstName, LastName FROM Instructors WHERE Id = {courseInstructorId}");
                var email = conn.Query<Instructors>($"SELECT Email FROM Instructors WHERE Id = {courseInstructorId}");
                var phone = conn.Query<Instructors>($"SELECT Phone FROM Instructors WHERE Id = {courseInstructorId}");

                InstructorName.Text = instructorName.ToString();
                InstructorEmail.Text = email.ToString();
                InstructorPhone.Text = phone.ToString();
            }
        }

XAML CollectionView:

<CollectionView x:Name="CourseInfoView">
            <CollectionView.ItemTemplate>
                <DataTemplate>
                    <Grid Padding="10">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <Label Grid.Column="0"
                               Grid.Row="0"
                               Text="{Binding CourseID}"
                        <Label Grid.Column="1"
                               Grid.Row="0"
                               Text="{Binding CourseName}"
                        <Label Grid.Column="0"
                               Grid.Row="1"
                               Text="Start Date:"
                        <DatePicker x:Name="StartDatePicker"
                                    MinimumDate="01/01/2020"
                                    MaximumDate="12/31/2050"
                                    Date="{Binding RealStartDate}"
                                    DateSelected="OnDateSelected"
                                    Grid.Column="1"
                                    Grid.Row="1"
                            <DatePicker.Format>MM/dd/yyyy</DatePicker.Format>
                        </DatePicker>
                        <Label Grid.Column="0"
                               Grid.Row="2"
                               Text="End Date:"
                        <DatePicker x:Name="EndDatePicker"
                                    MinimumDate="02/01/2020"
                                    MaximumDate="01/01/2051"
                                    Date="{Binding RealEndDate}"
                                    DateSelected="OnDateSelected"
                                    Grid.Column="1"
                                    Grid.Row="2"
                            <DatePicker.Format>MM/dd/yyyy</DatePicker.Format>
                        </DatePicker>
                        <Label Grid.Column="0"
                               Grid.Row="3"
                               Text="Select a status:"
                        <Picker x:Name="picker"
                                Grid.Column="1"
                                Grid.Row="3">
                            <Picker.ItemsSource>
                                <x:Array Type="{x:Type x:String}">
                                    <x:String>Not Started</x:String>
                                    <x:String>In Progress</x:String>
                                    <x:String>Completed</x:String>
                                    <x:String>Not Passed</x:String>
                                </x:Array>
                            </Picker.ItemsSource>
                        </Picker>
                        <Label Grid.Column="0"
                               Grid.Row="4"
                               Text="Course Instructor:"
                        <Label Grid.Column="1"
                               Grid.Row="4"
                               x:Name="InstructorName"
                        <Label Grid.Column="0"
                               Grid.Row="5"
                               Text="Instructor Email:"
                        <Label Grid.Column="1"
                               Grid.Row="5"
                               x:Name="InstructorEmail"
                        <Label Grid.Column="0"
                               Grid.Row="6"
                               Text="Instructor Phone:"
                        <Label Grid.Column="1"
                               Grid.Row="6"
                               x:Name="InstructorPhone"
                        <Label Grid.Column="0"
                               Grid.Row="7"
                               Text="Course Description:"
                        <Label Grid.ColumnSpan="2"
                               Grid.Row="8"
                               Text="{Binding CourseDescription}"
                        <Button x:Name="courseNotesButton"
                                Text="View Course Notes"
                                Clicked="courseNotesButton_Clicked"/>
                    </Grid>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>

Я уверен, что я упускаю что-то простое, но я не вижу, что это такое. Любая помощь, которую кто-либо может оказать, будет супер; спасибо!

1 Ответ

2 голосов
/ 05 марта 2020

Вы используете DataTemplate, это означает, что имена не будут доступны в коде позади. Шаблон - это то, что раздувается во время выполнения всякий раз, когда есть необходимость. Невозможно ссылаться на подобные элементы управления внутри DataTemplate. Шаблон будет повторяться для каждого элемента в базовой коллекции.

Вам захочется взглянуть на использование MVVM и привязку данных. Глобально это означает; положите все свои Course объекты в коллекцию, предпочтительно ObservableCollection. Затем установите CollectionView.ItemsSource для этой коллекции.

Вам не понадобятся атрибуты x:Name, вместо этого {Binding MemberName} будет использоваться для заполнения правильных значений. Я вижу, вы уже используете это, так что это здорово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...