【发布时间】:2011-08-10 01:42:22
【问题描述】:
我有一个名为 InformationView.xaml 的视图,这个视图被重新用于显示来自 3 个不同来源的相同信息(每个视图都有不同的窗口标题)。每个 View 的数据上下文都设置了一个 ViewModel 类型的相同实例。在我的 ViewModel 类中,我有一个 ICommand 属性,视图中的“关闭”按钮绑定到该属性。 -- 有没有办法确定谁是命令的发送者? (具体来说,按窗口标题)。
这是一个例子:
我有一个带有以下按钮的视图类(“注意:每个视图将有不同的窗口标题/显示来自不同来源的数据——但使用相同的视图)
<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执行了命令,会执行不同的方法
-
你不会为每个行为派生一个新的 ViewModel 并覆盖 OnClose() 方法吗?
-
是的,到目前为止,我认为这可能是最好的方法。总的来说,我想要同一个 ViewModel 的一个实例,并且根据哪个 View 执行了命令,ViewModel 将调用一个特定的方法。我正在考虑拥有一个支持所有类型视图的整体 ViewModel。我希望 XAML 中有一种方法可以将参数传递给我的 ViewModel。
-
可以使用 CommandParameter 属性将数据发送到 ViewModel,但是为您想要的不同行为派生一个新的 ViewModel 将是更好的方法。我经常将同一个 View 与从同一个基础派生的几个不同的 ViewModel 类重用。