Avalondock 使用 MVVM 关闭文档
Avalondock close document with MVVM
我们有一个工作的 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);
}
}
这有效,并且保留了按下内置关闭按钮的所有行为。但我认为这是一个丑陋的黑客。我依赖于视图将 CloseCommand 数据绑定到视图模型等。必须有更多的 MVVM 方式来触发关闭?
我是这样解决的
虚拟机
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>
我们有一个工作的 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);
}
}
这有效,并且保留了按下内置关闭按钮的所有行为。但我认为这是一个丑陋的黑客。我依赖于视图将 CloseCommand 数据绑定到视图模型等。必须有更多的 MVVM 方式来触发关闭?
我是这样解决的
虚拟机
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>