Arhn - архитектура программирования

Элемент управления Silverlight ListBox не выполняет повторную привязку правильно

Я использую элемент управления ListBox с ItemTemplate следующим образом:

<ListBox Name="lbItemsList" ItemsSource="{Binding}" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding ID}" Padding="5,0,0,0" />
                <TextBlock Text=" - " Padding="5,0,0,0" />
                <TextBlock Text="{Binding Description}" Padding="5,0,0,0" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Затем в коде я динамически привязываю коллекцию к ListBox следующим образом:

lbItemssList.ItemsSource = _itemsList.Values;

Но иногда мне нужно повторно привязать другой или измененный список элементов к ListBox. Когда я это делаю, ListBox не обновляется новым списком, и кажется, что привязка работает некорректно, если я не сделаю это:

lbItemssList.ItemsSource = null;
lbItemssList.ItemsSource = _itemsList.Values;

Я проделал то же самое с другими элементами управления ListBox, и у меня не было этой проблемы. Что мне здесь не хватает?


Ответы:


1

Прежде всего, здесь нет «привязки», вы просто присвоили коллекцию свойству ItemsSource.

Свойство ItemsSource будет сравнивать присвоенное ему значение с текущим значением, если значение такое же, оно ничего не сделает.

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

06.11.2010
  • В xaml есть привязка (к текущему DataContext), но затем она перезаписывается в коде программной части :) 08.11.2010
  • Аааа - так что он просто смотрит, является ли это другой экземпляр или нет, а не является ли другая коллекция. Я понимаю. Это отвечает на него, спасибо! 08.11.2010

  • 2

    Я устал, что на моей стороне, и он работает нормально. Мой код

    public MainPage()
        {
            InitializeComponent();
            BindData();
        }
    
    private void BindData()
        {
            List<MyClass> listClass = new List<MyClass>();
            for (int i = 0; i < 20; i++)
            {
                MyClass aMyClass = new MyClass();
                aMyClass.Description = "Description  " + i.ToString();
                aMyClass.ID = i;
                listClass.Add(aMyClass);
            }
    
            lbItemsList.ItemsSource = listClass;
        }
    
    private void buttonaa_Click(object sender, RoutedEventArgs e)
        {
            List<MyClass> listClass = new List<MyClass>();
            for (int i = 20; i < 40; i++)
            {
                MyClass aMyClass = new MyClass();
                aMyClass.Description = "Description  " + i.ToString();
                aMyClass.ID = i;
                listClass.Add(aMyClass);
            }
            lbItemsList.ItemsSource = null;
            lbItemsList.ItemsSource = listClass;
        }
    
    
    
     <ListBox Name="lbItemsList" ItemsSource="{Binding}" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding ID}" Padding="5,0,0,0" />
    
                        <TextBlock Text="{Binding Description}" Padding="5,0,0,0" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    

    Do check if you are geting the same recored from databse and you are thinking that list is no refreshing

    06.11.2010
  • Я думаю, что @Zannjaminderson спрашивает, почему необходимо начальное присвоение null, чтобы заставить его работать. В вашем случае вы можете удалить назначение null, и оно все равно будет работать. См. Может ответить за объяснение. 06.11.2010
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..