我有一个Xamarin Forms项目,使用ViewModels和XAML绑定。我有一个特定的ListView绑定到特定对象的ObservableCollection。
点击我试图更改按钮的颜色,我可以看到事件正在触发,PropertyChanged正在按预期工作,但是按钮在我向下滚动ListView之前不会改变颜色所以它不再在视野中,然后向上滚动到它。一旦我向后滚动,我认为这会触发某种"让我知道你的状态,这样我就可以向你展示"事件正在接受改变。
以下是我的XAML:
<ListView CachingStrategy="RecycleElement" ItemsSource="{Binding ListViewItems}" Margin="0,20,0,0" RowHeight="130" SeparatorVisibility="None" VerticalOptions="FillAndExpand" Grid.Column="1" Grid.Row ="0" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Button Command="{Binding HeatClickedCommand}" Margin="5,10,5,10" HorizontalOptions ="FillAndExpand" BackgroundColor="{Binding color_hex}" Grid.Column="1" TextColor="{StaticResource LightTextColor}" FontSize="Medium" Text="{Binding heat_title}"></Button>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
您可能会注意到我正在使用CachingStrategy="RecycleElement"
也许可能有一段时间与这个问题有关,其背后的原因在之前的SO帖here中有所解释。
基本上使用默认的CachingStrategy会导致意外结果。
答案 0 :(得分:4)
要立即更新视图,您必须在模型上实现INotifyPropertyChanged
界面。使用此接口,只要属性值发生更改,它就会通知UI并相应地进行更新。
滚动时更新它的原因是因为细胞被重新绘制或者甚至完全重新填充。
不要错误地认为使用ObservableCollection
会这样做,因为这只会反映集合结构中的更新,而不是其中的模型。