如何使用ItemsSource中每个项目的索引(包括何时删除项目)为Xamarin.Forms ListView中的项目编号?

时间:2019-02-19 15:37:30

标签: xaml listview xamarin.forms binding

我有一个转换器,该转换器将ListView作为参数作为每个项目作为List的参数,然后,使用ItemsSource和IndexOf,我可以确定项目在列表中的位置并将其作为View的数字返回:

public class MyConverter : IValueConverter, IMarkupExtension
{
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
     {
         var listView = parameter as ListView;
         var collection = listView.ItemsSource as IList;
         object item = value;

         var answer = collection.Count - collection.IndexOf(item); //I'm actually numbering items in reverse.
         return answer;
     }
}

我使用整个绑定上下文({Binding .})绑定到它,以便将每个项目作为值传递给它自己的转换器,就像这样:

<ListView x:Name="ListViewItself" ItemsSource="{Binding TheItemSource}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Label Text="{Binding ., Converter={converters:MyConverter}, ConverterParameter={x:Reference ListViewItself}}" />
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这很好。当我将项目添加到列表中时,转换器会正确计算正确的项目位置。

我现在的问题是,当我从集合和ListView中删除项目时,ListView中每个剩余项目的值应自动更新,以考虑其新位置。但这种情况并非如此。调用了转换器,但这些项目具有许多空值。

我想知道,如何为列表中的每个绑定上下文调用RaisePropertyChanged,以使转换器对所有绑定上下文正确触发?

编辑: 我尝试使用 RaisePropertyChanged(nameof(TheItemSource))当我从集合中删除一个项目时,但并没有像我期望的那样触发每个项目的转换器。

0 个答案:

没有答案