Обновление представления при изменении свойства элемента ObservableCollection

У меня есть xaml-код

      <ListView x:Name="ListObject"
              ItemsSource="{x:Bind ObjectList}">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid BorderThickness="{Binding BorderThickness}">
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate></ListView>

Код программной части:

      private readonly ObservableCollection<Item> ObjectList = new();
public class Item
{
        public Thickness BorderThickness { get; set; }
}

когда я делаю ObjectList.Add(new Item(){BorderThickness = new(10)}), Он создаст сетку с толщиной границы = 10, как и ожидалось. Теперь я хочу изменить толщину границы элемента на 100, я делаю ObjectList[0].BorderThickness =new(100), но это не работает, представление не обновляется.

Итак, мой вопрос: как изменить толщину границы элемента в ObservableCollection и обновить представление?

Спасибо.

1 ответ

Ваш Itemкласс должен реализовать INotifyPropertyChanged и вызывать событие при изменении значения толщины. Например:

      class Item : INotifyPropertyChanged
{
    private Thickness borderThickness;

    public Thickness BorderThickness
    {
        get { return borderThickness; }
        set
        {
            if (borderThickness!= value)
            {
                borderThickness= value;
                OnPropertyChanged(nameof(BorderThickness));
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Затем обязательно установите режим привязки OneWay, потому что по умолчанию это OneTime.

Другие вопросы по тегам