当 ObservableCollection 的项目 属性 更改时更新视图

Update view when item's property of ObservableCollection is changed

我有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)}) 时,它将按预期创建 borderthickness = 10 的网格。现在我想将项目的边框粗细更改为 100,我做了 ObjectList[0].BorderThickness =new(100),但是它不起作用,视图没有更新。

所以,我的问题是如何在 ObservableCollection 中更改项目的边框厚度并更新到视图?

谢谢。

您的 Item class 必须实施 INotifyPropertyChanged,并在 Thickness 的值更改时引发事件。例如:

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。