У меня есть конвертер, который принимает ListView в качестве параметра для каждого элемента в качестве списка, а затем, используя ItemsSource и IndexOf, я могу определить положение элементов в списке и вернуть его как число для представления.:
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))
при удалении элемента из коллекции, но он не запускает конвертер для каждого элемента, как я ожидал.