与MVVM的Avalondock关闭文档

时间:2017-11-17 08:58:26

标签: wpf mvvm caliburn.micro avalondock

我们有一个工作的avalondock实现,可以监听onclosing事件,如果文档没有保存,用户就有机会保存它等。运行良好。

现在,用户想要一个“文件”菜单中的关闭按钮,它应该像内置的关闭按钮(文档名称中的小X)一样工作。

我发现的唯一方法是MVVM不是很友好。

我将CloseCommand数据绑定到可停靠项ViewModel,如

<Setter Property="CloseCommand" Value="{ Binding Model.CloseCommand, Mode=TwoWay}" />

然后从ViewModel我有一个方法

public ICommand CloseCommand { get; set; }

public void Close()
{
    if (CloseCommand.CanExecute(this))
    {
        CloseCommand.Execute(this);
    }
}

这样可以保留按下内置关闭按钮的所有行为。但我认为这是一个丑陋的黑客。我依赖于View将CloseCommand数据绑定到viewmodel等。必须有更多的MVVM触发方式?

1 个答案:

答案 0 :(得分:0)

我这样解决了

VM

public ICommand CloseCommand { get; set; }

public void Close()
{
    if (CloseCommand.CanExecute(this))
    {
        CloseCommand.Execute(this);
    }
}

查看

<xcad:DockingManager.LayoutItemContainerStyle>
    <Style TargetType="{x:Type xcad:LayoutItem}">
        <Setter Property="Title" Value="{Binding Model.Title}" />
        <Setter Property="IconSource" Value="{Binding Model.Icon}"/>
        <Setter Property="IsActive" Value="{Binding Model.IsActive, Mode=TwoWay}"/>
        <Setter Property="ContentId" Value="{Binding Model.ContentId}"/>
        <Setter Property="Visibility" Value="{Binding Model.IsVisible, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter={x:Static Visibility.Hidden}}"/>
        <Setter Property="CloseCommand" Value="{ Binding Model.CloseCommand, Mode=TwoWay}" />
    </Style>
</xcad:DockingManager.LayoutItemContainerStyle>