如何确定哪个View执行了命令

时间:2011-08-10 01:42:23

标签: c# .net wpf mvvm

我有一个名为InformationView.xaml的View,这个View被重复用于显示来自3个不同来源的相同信息(每个视图都有不同的窗口标题)。每个View都将其datacontext设置为一个ViewModel类型的相同实例。在我的ViewModel类中,我有一个ICommand属性,View中的“Close”按钮被绑定到该属性。 - 有没有办法确定发件人是谁的命令? (具体来说,按窗口标题)。

以下是一个例子:

我有一个带有以下按钮的视图类(“注意:每个视图将有不同的窗口标题/来自不同来源的显示数据 - 但使用相同的视图)

<Button Width="75" Height="23" Margin="0,0,5,5" Content="Close" Command="{Binding CloseCommand}" />

我有一个带有以下命令的ViewModel类

    public ICommand CloseCommand
    {
        get
        {
            if (this._closeCommand == null)
            {
                this._closeCommand = new RelayCommand(Command => this.OnClose());
            }     
            return _closeCommand;
        }
    }

我正在寻找一种方法来确定执行命令的窗口(我将使用相同的ViewModel创建View的多个实例)。

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解正确。但是,您可以实现Unloaded事件。在该事件方法中设置断点并在达到断点时设置断点。您可以检查该视图的窗口标题属性。

答案 1 :(得分:0)

如何将Close()方法公开,以便其他对象可以指定关闭行为应该是什么?

InformationViewModel中的某些内容:

public event EventHandler RequestClose;

void OnRequestClose()
{
    EventHandler handler = this.RequestClose;
    if (handler != null)
        handler(this, EventArgs.Empty);
}

然后您可以在其他视图模型中使用它,如下所示:

InformationViewModel.Close += CloseMethod;

public CloseMethod(object sender, EventArgs e)
{
    // Implement close logic here
}