Обновление представления при изменении свойства элемента 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.