我正在尝试将AvalonDock与MVVM一起使用,并禁用LayoutAnchorable
的隐藏功能。没有MVVM,我可以做类似的事情:
<xcad:LayoutAnchorable CanHide="False">
<TextBox>Some Content</TextBox>
</xcad:LayoutAnchorable>
CanHide="False"
禁止隐藏。
如何使用MVVM访问CanHide
属性或以其他方式禁用隐藏?
我有:
<xcad:DockingManager AnchorablesSource="{Binding UserPanelList}">
<xcad:DockingManager.LayoutItemContainerStyle>
<Style TargetType="xcad:LayoutItem">
<Setter Property="Title" Value="{Binding Model.Title}" />
<Setter Property="ContentId" Value="{Binding Model.ContentId}" />
</Style>
</xcad:DockingManager.LayoutItemContainerStyle>
<xcad:DockingManager.LayoutItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding Control}" />
</DataTemplate>
</xcad:DockingManager.LayoutItemTemplate>
<xcad:LayoutRoot>
<xcad:LayoutPanel Orientation="Horizontal">
<xcad:LayoutAnchorablePane>
</xcad:LayoutAnchorablePane>
</xcad:LayoutPanel>
</xcad:LayoutRoot>
</xcad:DockingManager>
还有一个完全平凡的模型类:
public class UserPanel : INotifyPropertyChanged
{
public string Title { get; set; }
public string ContentId { get; set; }
public bool CanHide { get; set; } // ??
// (NotifyPropertyChanged not implemented for these properties here
// for the sake of brevity. Basically works without.)
public UserControl Control
{
get => _userInterface;
set
{
if (value != _userInterface)
{
_userInterface = value;
OnPropertyChanged();
}
}
}
UserControl _userInterface;
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
视图类是根据绑定的UserPanelList
的内容创建的。
但是,LayoutItem
类不包含CanHide
属性,即我不能使用<Setter>
afaik。我该怎么办?
答案 0 :(得分:0)
从LayoutAnchorableItem
派生的类LayoutItem
用于LayoutAnchorable
(请参阅e.g. here)。它具有一个依赖属性CanHide
,该属性可以按预期工作。
打开可以通过以下方式设置LayoutAnchorableItem
的样式
<Style TargetType="xcad:LayoutAnchorableItem">
<!-- ... -->
<Setter Property="CanHide" Value="{Binding Model.CanHide}" />
或更灵活的方式,
<Style TargetType="xcad:LayoutItem">
<!-- ... -->
<Setter Property="xcad:LayoutAnchorableItem.CanHide" Value="{Binding Model.CanHide}" />