0

我正在使用 WPF,并尝试遵循 MVVM。所以我有一个将我的模型作为属性的虚拟机。模型有一个属性,它是一个模型 1 的列表,它实现了一个命令。我不想将命令移动到 ViewModel,所以我可以访问视图的原因是我不知道我的列表将有多少元素,我想确保我的命令访问它的 model1 . 此命令也进行一些处理,我希望在此处理期间隐藏包含绑定到命令的按钮的窗口。我怎样才能做到这一点?我应该去哪里看?

4

1 回答 1

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!
}
于 2013-07-06T23:01:07.513 回答