gpt4 book ai didi

c# - AvalonDock 绑定(bind)在 DocumentHeaderTemplate 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:57 25 4
gpt4 key购买 nike

我将 ViewModel(xaml 中的项目)绑定(bind)到 AvalonDock ,一切正常,但在一种情况下失败了。

LayoutItemTemplate工作正常并且 DataContext<v:CameraItemView /> (我的 UserControl)是用 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");
}
}
}

属性(property) CameraItemViewModel

private string name;
public string Name
{
get { return name; }
set
{
if (name != value)
{
name = value;
NotifyPropertyChanged("Name");
}
}
}

当我使用此属性时 Name在用户控件中 <v:CameraItemView />它有效。

是否有可能访问收藏品?

我的解决方案:

已添加 Content在路径的开头,因为 ViewModel存储在 ContentLayoutDocument .

<ad:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<Label Content="{Binding Content.Name}" />
</DataTemplate>
</ad:DockingManager.DocumentHeaderTemplate>

最佳答案

我已经通过下面的操作解决了它,

DocumentHeaderTemplate

  <xcad:DockingManager.DocumentHeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Content.DocumentPath}" />
</StackPanel>
</DataTemplate>
</xcad:DockingManager.DocumentHeaderTemplate>

资源

<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>

View 模型

public class DocumentViewModel 
{
private string documentPath;
public string DocumentPath
{
get { return documentPath; }
set { SetProperty(ref documentPath, value); }
}
}

尝试在 binding 中添加 Content.Name 我相信会解决您的问题。让我知道它是否有效。

关于c# - AvalonDock 绑定(bind)在 DocumentHeaderTemplate 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32089548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com