如何处理使用MVVM在ListView的itemtemplate中启用/禁用按钮?

时间:2012-01-17 14:15:53

标签: wpf mvvm

我正在使用ListView控件,该控件在itemtemplate中有按钮集合,并希望处理ViewModel上每个按钮的启用和禁用。

1 个答案:

答案 0 :(得分:2)

我最好的建议是:使用command(我通常使用Prism的DelegateCommandDelegateCommand<T>,您可以通过NuGet下载Prism包,这使得它几乎无痛)

然后将按钮的命令绑定到命令:

<Button Command="{Binding MyCommand}" />

该命令的CanExecute方法将确定是启用还是禁用该按钮。

另一种方法是在ItemViewModel中公开IsEnabled属性,然后将按钮上的IsEnabled属性绑定到它。

如果需要绑定到父ViewModel中的属性,可以通过多种方法从模板中获取它。

以下是一些:

<UserControl x:Class="MyControl" x:Name="this" ...>

<...>
  <DataTemplate>
    <Grid>
      <Button
        IsEnabled="{Binding DataContext.IsEnabled, ElementName=this}"/>
      <Button
       IsEnabled="{Binding DataContext.IsEnabled, 
 RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyControl}}}"
    </Grid>
  </DataTemplate>
</...>
</UserControl>