2013-07-06 54 views
0

我正在使用WPF,我试图遵循MVVM。 所以我有一个虚拟机,它有我的模型作为属性。 Model有一个属性,它是一个model1的列表,它实现了一个命令。 为什么我不想将命令移动到ViewModel,所以我可以访问视图的原因是我不知道我的列表中有多少元素,我想确保我的命令访问它的MODEL1。 这个命令也做了一些处理,并且我希望在这个处理过程中,窗口保存绑定到该命令的按钮来隐藏。 我该如何做到这一点?我应该在哪里看?如何隐藏使用WPF中的命令发送命令的窗口?

回答

1

在这种情况下,最好是您的ViewModel具有该命令并需要一个参数。这样,你会传递用户试图修改的项目。所以,如果你有一个ItemsControl

<ItemsControl ItemsSource="{Binding MyItems}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Button Content="{Binding Name, StringFormat=Push {0}}" 
        Command="{Binding DataContext.ItemPushedCommand, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" 
        CommandParameter="{Binding}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

在您的视图模型,你需要定义你的命令,像这样(我使用的是DelegateCommand从prism,你可以使用任何命令你是舒服):

private readonly DelegateCommand<Model> itemPushedCommand; 

public ICommand ItemPushedCommand { get { return itemPushedCommand; } } 

public MyViewModel() 
{ 
    itemPushedCommand = new DelegateCommand<Model>(OnItemPushed); 
} 

private void OnItemPushed(Model item) 
{ 
    // your item has been pushed! 
} 
+0

和内部OnItemPushed我可以调用项目的例程。谢谢你的回答,这是我一直在寻找的。 – Andrei