i使用ViewModels和XAML绑定具有一个Xamarin表单项目。我有一个特定的listView,该视图绑定到特定对象的观测值。
单击我试图更改按钮的颜色,我可以看到该事件正在启动,并且属性变换为预期的工作,但是该按钮不会更改颜色,直到我向下滚动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"
这可能与这个问题有关,这是在以前的帖子中解释的原因。
本质上具有默认的cachingstrategy导致意外结果。
要立即更新视图,您将必须在模型上实现INotifyPropertyChanged
接口。使用此接口,只要属性值更改,它将通知UI并相应更新。
每当您滚动时会更新它的原因是因为单元格被重新粉刷甚至重新填充。
没有错误地认为使用ObservableCollection
会这样做,因为这仅反映了集合结构中的更新,而不是其中的模型。