Установка DataGrid ItemsSource вызывает XamlParseException - PullRequest
0 голосов
/ 07 апреля 2020

, поэтому у меня проблема с файлом XAML, который я использую; Я пытаюсь использовать DataGrid для добавления табличного представления свойств для элемента, который выбирает пользователь. В настоящее время я пытаюсь сделать это, у меня есть список, содержащий соответствующие пары, которые заполняются по щелчку пользователя, а затем для этого списка устанавливается ItemSource. Я попытался изменить детали этой реализации (связывание ItemsSource без ссылки на саму сетку данных и т. Д. c, но рано или поздно все они, похоже, сталкиваются с одной и той же ошибкой) Call Stack Trace when attempting to set ItemsSource

Странная вещь (для меня) заключается в том, что после нескольких щелчков мышью по различным элементам (и нажатие кнопки «Продолжить», когда появляется исключение) сетка заполняется данными, хотя часто кажется, что она «зависает» (показывая те же данные для нескольких элементов перед последующим обновлением пары элементов позже, исключений не выдается, но поведение определенно противоречиво)

.xaml.cs

// ParameterPair is a custom class that contains 2 string fields (name, value)
        public List<ParameterPair> AllParameters { get; private set; } = new List<ParameterPair>();


                // called (only) when a new element is click
                // ... code to populate AllParameters here
                // definitely populates properly, checked through debugging
                this.dGrid.ItemsSource = AllParameters;

.xaml

<Page ...>
<Grid HorizontalAlignment="Stretch">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <TabControl>
        <TabItem Header="Add Constraint">
            <Grid Name="loginBlock" Grid.Row="0">                        

        <GroupBox Header="Properties"
                      HorizontalAlignment="Stretch"
                      VerticalAlignment="Top"
                      Margin="10, 10, 10, 0">
                        <StackPanel>


                            <controls:DataGrid x:Name="dGrid" 
                            Height="300" Margin="12"
                            AutoGenerateColumns="true"
                        ItemsSource="{Binding}"
                                               />
                    </StackPanel>
            </GroupBox>
            </Grid>
        </TabItem>
        <TabItem Header="Manage Constraints" />
    </TabControl>

</Grid>
</Page>

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Ошибка не в вашей привязке данных, а в разметке xaml. У вашего GroupBox, похоже, нет закрывающих скобок. И это пользовательский DataGrid? Так как он упоминается как «controls: DataGrid» в отличие от других ваших элементов управления. Возможно, что-то не так в его разметке.

0 голосов
/ 08 апреля 2020

Хорошо, я исправил это. Оказывается, AutoGenerateColumns = "true" был виновником. Я пришел к этой теме в своем разочаровании и попытался вручную установить столбцы, что, кажется, прекрасно работает, просто привязав столбцы к соответствующим полям в классе, используемом для списка.

                            <DataGrid x:Name="dGrid"
                            Height="300" Margin="12"
                            AutoGenerateColumns="false"
                        ItemsSource="{Binding}"
                                               >
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="Name" Binding="{Binding Name}" />
                                    <DataGridTextColumn Header="Value" Binding="{Binding Value}" />
                                </DataGrid.Columns>
                            </DataGrid>

PS Я не буду выбирать это в качестве своего ответа, так как это во многом обходной путь, надеюсь, кто-то более опытный придет и даст более тщательное и лаконичное решение (возможно, я позже в этом проекте ...)

...