我假设您为此使用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 项目,底部面板还公开了一个集合视图。集合视图允许我们跟踪 UI 中的当前选择。
我在示例 XAML 中使用简单的 ListBoxes,但您可以使用任何您喜欢的 ItemsControl。
当底部面板中的选择发生变化时,窗口视图模型会听到这一点并将所选项目添加到最近面板的 ObservableCollection 中。您显然希望在此处添加逻辑以检查重复项等。