我正在使用WPF,我尝试关注MVVM。 所以我有一个将我的模型作为属性的VM。 Model有一个属性,它是model1的列表,它实现了一个命令。 我不想将命令移动到ViewModel的原因,所以我可以访问视图是我不知道我的列表将有多少元素,我想确保我的命令访问其model1 。 这个命令也做了一些处理,我希望在这个处理过程中,窗口可以隐藏绑定到命令的按钮。 我怎样才能做到这一点?我应该在哪里看?
答案 0 :(得分: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>
在ViewModel中,您可以像这样定义命令(我正在使用prism中的DelegateCommand,您可以使用您熟悉的任何命令):
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!
}