Двустороннее связывание данных в AdaptiveGridView - PullRequest
0 голосов
/ 01 июня 2019

Я создаю приложение UWP, в котором я использую элемент управления AdaptiveGridView для отображения списка элементов.

Когда я впервые устанавливаю ItemSource в AdaptiveGridView, все работает как положено, и я вижу список отображенных.

Однако, если я пытаюсь добавить новый элемент в свойство ItemsSource AdaptiveGridView, этот новый элемент не отображается. Но при проверке ItemsSource я вижу, что новый элемент действительно был добавлен, но он не отображается.

Единственный способ обойти это - сначала установить для свойства ItemsSource значение null, а затем снова установить его для нового элемента.

<Page.Resources>
    <DataTemplate x:Key="Items">
        <Grid Name="GoalCardGrid">
            <!--UI stuff-->
        </Grid>
    </DataTemplate>
</Page.Resources>
<StackPanel Margin="10,0,10,0">
    <UI:AdaptiveGridView Margin="0,20,0,0" HorizontalAlignment="Stretch" Grid.Row="2" x:Name="ItemsGV" 
                         ItemHeight="250" DesiredWidth="700" ItemTemplate="{StaticResource Items}">
    </UI:AdaptiveGridView>
</StackPanel>

    public static List<Item> Items = new List<Item>();

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        Items.Add(new Item()
        {
            ImageUrl = "ms-appx:///Assets/download (1).jpeg"
        });

        Items.Add(new Item()
        {
            ImageUrl = "ms-appx:///Assets/download (2).jpeg"
        });

        ItemsGV.ItemsSource = Items;
    }

    private void AddGoalBtn_Click(object sender, RoutedEventArgs e)
    {
        Items.Add(new Item()
        {
            ImageUrl = "ms-appx:///Assets/download (1).jpeg"
        });
        ItemsGV.ItemsSource = null;
        ItemsGV.ItemsSource = Items;
    }

Новые элементы должны отображаться, когда я их добавляю, однако они не отображаются, и мне пришлось

1 Ответ

0 голосов
/ 03 июня 2019

В классе List не реализован интерфейс INotifyPropertyChanged , когда в него добавляются новые элементы, он уведомляет пользовательский интерфейс.

Для решения вашей проблемы используйте ObservableCollection .

using System.Collections.ObjectModel;
public static ObservableCollection<Item> Items = new ObservableCollection<Item>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...