ObservableCollection не обновляет представление списка - PullRequest
1 голос
/ 16 августа 2011

У меня есть ObservableCollection, которая просматривается в пользовательском списке. Мне нужен список для обновления представления в соответствии с примененными изменениями, такими как вставка новых или удаление каналов из ObservableCollection

части кода доступны ниже

public class lbl
{
    public ObservableCollection<feed> ModifiedItems 
        = new ObservableCollection<feed>();

    public lbl()
    {
        InitializeComponent();
        listBox1.ItemsSource = ModifiedItems ;
    }

    public void update(object sender, EventArgs e)
    {
        var x = ModifiedItems.Last();
        listBox1.Items.Add(x);
    }
}

public class feed
{
    public int ID { get; set; }
    public int source_id { get; set; }
    public string title { get; set; }
    public string source_icon { get; set; }
    public string url { get; set; }
    public string pudate { get; set; }
}

XAML

<ListBox x:Name="listBox1" >
    <ListBox.ItemTemplate >
        <DataTemplate >
            <StackPanel Width="400" Margin="20" >
                <Button x:Name="pic"  Tag="{Binding Id}">
                    <Button.Template>
                        <ControlTemplate>
                            <TextBlock Text="{Binding title}" TextWrapping="Wrap" FontFamily="Arial" FontSize="28" Tag="{Binding Id}"/>
                        </ControlTemplate>
                    </Button.Template>
                </Button>
                <TextBlock Text="{Binding pudate}" TextWrapping="Wrap" FontSize="24"/>
                <Image Source="{Binding source_icon}" Width="100" Height="60"/>
           </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Примечание: это не часть кода. Выдает ошибку при попытке добавить элемент «Операция не поддерживается в коллекции только для чтения».

Я попробовал решение, опубликованное здесь Реализация CollectionChanged , и все же я получаю ту же ошибку.

Любая помощь, пожалуйста, спасибо заранее

Ответы [ 2 ]

5 голосов
/ 16 августа 2011

Проблема связана с вашим методом обновления:

 public void update(object sender, EventArgs e)
 {
     var x = ModifiedItems.Last();
     listBox1.Items.Add(x);
 }

ItemsSource вашего ListBox установлено на ModifiedItems, что является ObservableCollection.Поэтому, если вы добавите или удалите элементы из этой коллекции, пользовательский интерфейс ListBox обновится автоматически.Например, чтобы добавить новые элементы в ваше представление, просто сделайте следующее:

ModifiedItems.Add(new feed());

Это целая точка ObservableCollection, представление может наблюдать это!

Если,вместо того, чтобы добавлять / удалять элементы, вы обновляете существующие элементы, вам нужно будет feed внедрить INotifyPropertyChanged.

0 голосов
/ 16 августа 2011

Поскольку вы устанавливаете ItemsSource ListBox, вы привязываете к нему коллекцию ModifiedItems.

Это означает, что вам нужно изменить ModifiedItems, а не ListBoxдобавлять / удалять элементы, которые затем будут обновляться соответственно.

public void update(object sender, EventArgs e)
{
    var x = ModifiedItems.Last();
    ModifiedItems.Items.Add(x);
}

Почему вы хотите дублировать последний элемент, мне неведомо.Но это то, что вам нужно сделать.

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