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