我将ViewModels(xaml中的项目)绑定到AvalonDock
,一切正常,但在一种情况下它会失败。
LayoutItemTemplate
正常工作,DataContext
{我的UserControl}的<v:CameraItemView />
是使用ViewModel设置的。
<ad:DockingManager x:Name="dockManager"
DocumentsSource="{Binding Path=Items}"
ActiveContent="{Binding Path=CurrentItem, Mode=TwoWay}">
<ad:DockingManager.LayoutItemTemplate>
<DataTemplate>
<v:CameraItemView />
</DataTemplate>
</ad:DockingManager.LayoutItemTemplate>
<ad:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<Label Content="{Binding Name}" />
</DataTemplate>
</ad:DockingManager.DocumentHeaderTemplate>
</ad:DockingManager>
问题在于DocumentHeaderTemplate
,当我使用静态文本填充Content
时,它会正确显示,当仅保留<Label Content="{Binding}" />
时,它会显示Xceed.Wpf.AvalonDock.Layout.LayoutDocument
MainViewModel
包含:
private ObservableCollection<CameraItemViewModel> items;
public ObservableCollection<CameraItemViewModel> Items
{
get { return items; }
set
{
if (items != value)
{
items = value;
NotifyPropertyChanged("Items");
}
}
}
private CameraItemViewModel currentItem;
public CameraItemViewModel CurrentItem
{
get { return currentItem; }
set
{
if (currentItem != value)
{
currentItem = value;
NotifyPropertyChanged("CurrentItem");
}
}
}
CameraItemViewModel
private string name;
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
NotifyPropertyChanged("Name");
}
}
}
当我在UserControl Name
中使用此属性<v:CameraItemView />
时,它可以正常工作。
是否有可能访问收集项目?
我的解决方案:
在路径开头添加了Content
,因为ViewModel
存储在Content
的{{1}}中。
LayoutDocument
答案 0 :(得分:4)
我已经通过以下方式解决了这个问题,
DocumentHeaderTemplate
<xcad:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Content.DocumentPath}" />
</StackPanel>
</DataTemplate>
</xcad:DockingManager.DocumentHeaderTemplate>
Resources
<xcad:DockingManager.Resources>
<DataTemplate DataType="{x:Type ViewModels:DocumentViewModel}">
<Views:DocumentView DataContext="{Binding}" DocumentPath="{Binding DocumentPath}" />
</DataTemplate>
</xcad:DockingManager.Resources>
LayoutDocumentPaneGroup
<xcad:LayoutDocumentPaneGroup>
<xcad:LayoutDocumentPane/>
</xcad:LayoutDocumentPaneGroup>
ViewModel
public class DocumentViewModel
{
private string documentPath;
public string DocumentPath
{
get { return documentPath; }
set { SetProperty(ref documentPath, value); }
}
}
尝试在Content.Name
中添加binding
即可解决您的问题。让我知道它是否有效。