Вы не должны реализовывать элементы управления в вашей модели представления. Это делает его представлением, а не моделью представления. Свойства вашей модели представления должны быть ObservableCollection<T>
, и вы должны привязать ItemsSource
элементов управления элементами к этим свойствам.
Если вы сделаете это, ваш XAML может выглядеть так:
<ListBox ItemsSource="{Binding List1}" SelectedItem="{Binding SelectedItem1, Mode=TwoWay}"/>
<ListBox ItemsSource="{Binding List2}" SelectedItem="{Binding SelectedItem2, Mode=TwoWay}"/>
<Button Command="{Binding MoveItemFromList1ToList2Command}">Move</Button>
List1
и List2
относятся к типу ObservableCollection<T>
, SelectedItem1
и SelectedItem2
относятся к типу T
(каким бы типом вы ни выбрали T
), а MoveItemFromList1ToList2Command
является RoutedCommand
, для которого определены эти два обработчика:
public bool CanMoveItemFromList1ToList2
{
{ get { return SelectedItem1 != null; }
}
public void MoveItemFromList1ToList2()
{
List2.Add(SelectedItem1);
List1.Remove(SelectedItem1);
}
Мне бы пришлось проверить этот код, чтобы убедиться, но я не думаю, что вам нужно беспокоиться об уведомлении об изменении свойства в методе MoveItemFromList1ToList2
; когда вы удаляете элемент из List1
, ObservableCollection
уведомит ListBox
, что элемент был удален, а ListBox
установит SelectedItem
в ноль, обновив SelectedItem1
в модели представления. (И, конечно, это приведет к разрыву кода, если вы удалите его из первой коллекции перед добавлением во вторую.)