2

我在具有 Caliburn.Micro 框架的项目中使用 VS 样式的 Tabcontrol(来自 MahApps.Metro 项目),并且我正在寻找一种方法让从 Conductor.Collection.OneActive 继承的 ViewModel 知道何时关闭选项卡. 不幸的是,关闭按钮已经包含在样式中,这让我有点困惑。我在 MahApps 源文件中查找了这种 VS Tabcontrol 样式,发现每个关闭按钮都绑定到一个 CloseCommmand (Command="{Binding Path=CloseCommand}")。我如何对单击该按钮做出反应?

4

2 回答 2

0

DeactivateItem事件附加到关闭按钮。

<Button cal:Message.Attach="DeactivateItem($dataContext, 'true')" />

DeactivateItem是caliburn micro的一个框架方法,定义在Conductor类中。此方法将关闭关联的视图并从导体集合中删除视图。

供参考:

框架方法。

public override void DeactivateItem(T item, bool close) {
            if(item == null || !item.Equals(ActiveItem))
                return;

            CloseStrategy.Execute(new[] { ActiveItem }, (canClose, items) => {
                if(canClose)
                    ChangeActiveItem(default(T), close);
            });
        }
于 2015-06-26T16:51:55.737 回答
0

由于 CloseTabCommand 将触发 Unloaded 事件,因此我的解决方法是将处理程序附加到它。

public partial class MyTab : MetroTabItem {

    public MyTab() {
        InitializeComponent();
        this.Unloaded += dosomthing;
    }

    public void dosomething(Object sender, EventArgs e) {
        //Your code
    }
}
于 2016-01-28T17:23:55.457 回答