下面是一个使用AvalonDock的示例代码,其中包含多个LayoutDocumentPane,每个Pane都包含一个不同的ObservableCollection,这些集合中包含动态创建的UserControls。
首先,我们需要在XAML文件中放置一个AvalonDock控件,并创建多个LayoutDocumentPane。在每个LayoutDocumentPane中,我们使用ItemsControl控件来显示ObservableCollection中的UserControls。以下是XAML代码示例:
在代码中,我们需要创建两个ObservableCollection,分别用于Pane1和Pane2。我们还需要创建一个实现了INotifyPropertyChanged接口的ViewModel类,并将这两个集合作为其属性。以下是ViewModel类的示例代码:
public class ViewModel : INotifyPropertyChanged
{
private ObservableCollection _pane1Collection;
public ObservableCollection Pane1Collection
{
get { return _pane1Collection; }
set
{
_pane1Collection = value;
OnPropertyChanged("Pane1Collection");
}
}
private ObservableCollection _pane2Collection;
public ObservableCollection Pane2Collection
{
get { return _pane2Collection; }
set
{
_pane2Collection = value;
OnPropertyChanged("Pane2Collection");
}
}
public ViewModel()
{
// 初始化集合
Pane1Collection = new ObservableCollection();
Pane2Collection = new ObservableCollection();
// 动态创建UserControls并添加到集合中
UserControl userControl1 = new UserControl1();
Pane1Collection.Add(userControl1);
UserControl userControl2 = new UserControl2();
Pane1Collection.Add(userControl2);
UserControl userControl3 = new UserControl3();
Pane2Collection.Add(userControl3);
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
最后,在MainWindow的构造函数中,将ViewModel设置为DataContext:
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
这样,你就可以实现多个LayoutDocumentPane,每个Pane包含不同的ObservableCollection,其中包含动态创建的UserControls了。