Я пытаюсь создать GridView с номером строки и, чтобы пользовательские кнопки вверх/вниз изменили порядок строк. Многие сообщения предлагают использовать AlternationIndex (например, here) и что почти отлично работает, и он обрабатывает, когда пользователь нажимает кнопки вверх/вниз, чтобы изменить порядок строк. Но AlternationIndex терпит неудачу, когда вы перемещаете элемент в первую позицию - в этот момент он должен показывать 0, но вместо этого он обертывается до последнего значения в AlternationCount.WPF AlternationIndex обертывается при перемещении элементов вверху списка
Пример:
<ListView AlternationCount="1000" Name="_stuff" Grid.Row="0">
<ListView.View>
<GridView>
<GridViewColumn
Header="Alit" Width="30"
DisplayMemberBinding="{Binding (ItemsControl.AlternationIndex),
RelativeSource={RelativeSource AncestorType=ListViewItem}}" />
<GridViewColumn Header="ColumnName" DisplayMemberBinding="{Binding}" Width="240"/>
</GridView>
</ListView.View>
</ListView>
, а затем мой код, за это:
ObservableCollection<string> data = new ObservableCollection<string>() { "First", "Second", "Third", "Forth", "Last" };
public MainWindow()
{
InitializeComponent();
_stuff.ItemsSource = data;
}
private void UpDownButton_Click(object sender, RoutedEventArgs e)
{
//User wants to change the order -- remove the item from the observable
//collection and reinsert it at the new position.
data.Remove("Last"); //First remove, then re-insert.
//If you move the last item to *middle* of list, it works fine and the index
//is correct. (All other items are pushed down by 1, like you'd expect.)
//But move to the *top* of the list and the new index is 999?
//THIS WOULD WORK FINE AND ALL INDEXES ARE CORRECT
// data.Insert(3, "Last"); //Insert to middle of list
//But this gives an index of 999???? Seems to be wrapping
//around to the last AlternationCount. But why?
data.Insert(0, "Last"); //insert to top of list
}
Любых идеи, как я могу сделать alternationIndex этого нового элемента на вершине быть 0 вместо 999?
Вашего первое предложение не работает для меня (строки появились дублируются каждый раз), но второе предложение вызова ICollectionview.Refresh(), похоже, делает трюк. Благодаря! – user2543623