Mvvm 更改ObservaleCollection的属性没有任何作用
在我的Xamarin项目中,我有一个ListView,它由一个ObservableCollection填充,该集合保存具有某些属性的“Item”对象。如果我将项目添加到集合中,UI将得到更新,但如果我只更改一个属性,它将不起任何作用。即使在通过添加项进行UI更新之后,也不会产生任何效果,尽管属性已正确更改。如果属性发生更改,如何刷新UI BindableBase是PRISM中的一个类,它实现INotifyPropertyChanged,DelegateCommand实现ICommand,顺便说一句 这是我的XAML:Mvvm 更改ObservaleCollection的属性没有任何作用,mvvm,xamarin,binding,observablecollection,Mvvm,Xamarin,Binding,Observablecollection,在我的Xamarin项目中,我有一个ListView,它由一个ObservableCollection填充,该集合保存具有某些属性的“Item”对象。如果我将项目添加到集合中,UI将得到更新,但如果我只更改一个属性,它将不起任何作用。即使在通过添加项进行UI更新之后,也不会产生任何效果,尽管属性已正确更改。如果属性发生更改,如何刷新UI BindableBase是PRISM中的一个类,它实现INotifyPropertyChanged,DelegateCommand实现ICommand,顺便说一
<ListView ItemsSource="{Binding ListItems}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell x:Name="viewCell">
<ContentView Padding="0,0,0,5"
HeightRequest="50">
<ContentView.GestureRecognizers>
<TapGestureRecognizer BindingContext="{Binding Source={x:Reference listView}, Path=BindingContext}"
Command="{Binding ItemTappedCommand}"
CommandParameter="{Binding Source={x:Reference viewCell}, Path=BindingContext}" />
</ContentView.GestureRecognizers>
<Frame OutlineColor="{Binding Color}" Padding="8">
<StackLayout Orientation="Horizontal" >
<Image x:Name="checkedImage"
HeightRequest="30"
WidthRequest="30"
BackgroundColor="{Binding Color}"
/>
<Label Text="{Binding Text}"
TextColor="{Binding Color}"
Margin="20,0,0,0"
VerticalTextAlignment="Center"
HorizontalOptions="FillAndExpand"/>
<Image Source="{Binding Image}" />
</StackLayout>
</Frame>
</ContentView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这也是因为item类需要实现INotifyPropertyChanged。在您使用Prism的情况下,您只需要使项目类扩展BindableBase(Prism基类,它已经为您实现了INotifyPropertyChanged) 链接: 这应该会让它起作用 我还看到你在这样做:
public ObservableCollection<Item> ListItems
{
get { return _listItems; }
set { SetProperty(ref _listItems, value); }
}
公共可观测集合列表项
{
获取{return\u listItems;}
集合{SetProperty(ref _listItems,value);}
}
使用ObservableCollections,您不需要手动引发事件,因为它们已经在内部引发了。它们可以定义为常规属性
public ObservableCollection<Item> ListItems {get; set;}
publicobservableCollection列表项{get;set;}
谢谢!现在,属性更改按预期进行。同时也感谢您提供的关于ObservableCollection的提示。
public ObservableCollection<Item> ListItems
{
get { return _listItems; }
set { SetProperty(ref _listItems, value); }
}
public ObservableCollection<Item> ListItems {get; set;}