当 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。
我有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。