Я полагаю, вы используете для этого шаблон MVVM ?Если нет, вы должны быть.
Итак, если вы используете MVVM, вам подойдет что-то вроде этого:
class BottomPanelViewModel
{
public BottomPanelViewModel()
{
Items = new ObservableCollection<PageViewModel>();
ItemsView = new ListCollectionView(Items);
ItemsView.CurrentChanged += SelectionChanged;
}
public ObservableCollection<PageViewModel> Items { get; private set; }
public ListCollectionView ItemsView { get; private set; }
}
class RecentPanelViewModel
{
public RecentPanelViewModel()
{
Items = new ObservableCollection<PageViewModel>();
}
public ObservableCollection<PageViewModel> Items { get; private set; }
}
class WindowViewModel
{
public WindowViewModel()
{
BottomPanel = new BottomPanelViewModel();
RecentPanel = new RecentPanelViewModel();
BottomPanel.CurrentChanged += (s, e) =>
{
RecentPanel.Items.Add(BottomPanel.ItemsView.CurrentItem);
};
}
public BottomPanelViewModel BottomPanel { get; private set; }
public RecentPanelViewModel RecentPanel { get; private set; }
}
В конструкторе окон создайте экземпляр WindowViewModel и используйтеэто как ваш DataContext:
public Window()
{
InitializeComponent();
DataContext = new WindowViewModel();
}
Затем в вашем XAML вы можете связать со свойствами WindowViewModel:
<Window ...>
<DockPanel>
<ListBox DockPanel.Dock="Bottom"
ItemsSource="{Binding BottomPanel.ItemsView}"
IsSynchronizedWithCurrentItem="True"/>
<ListBox DockPanel.Dock="Left"
ItemsSource="{Binding RecentPanel.Items}"/>
</DockPanel>
</Window>
Объяснение: WindowViewModel содержит BottomPanelViewModel и RecentPanelViewModel.Каждый из них содержит ObservableCollection of Items, а нижняя панель также предоставляет представление коллекции.Представление коллекции позволяет нам отслеживать текущий выбор в пользовательском интерфейсе.
Я использую простые ListBoxes в примере XAML, но вы можете использовать любой элемент ItemsControl, который вам нравится.
Когда выбор изменяетсяна нижней панели модель представления окна слышит это и добавляет выбранный элемент в коллекцию ObservableCollection последней панели.Вы, очевидно, захотите добавить здесь логику для проверки дубликатов и т. Д.