我有一个转换器,该转换器将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))
当我从集合中删除一个项目时,但并没有像我期望的那样触发每个项目的转换器。