选中/取消选中基于ListView的启用按钮复选框WPF

时间:2017-01-28 11:05:29

标签: c# wpf mvvm

我有一个情况。

我有一个带复选框的ListView。复选框被定义为数据模板。 我有另一个堆栈面板,它包含一个按钮。我的要求是,最初在窗口加载时,没有选中任何复选框,应禁用按钮。 当用户点击任何一个复选框时,应该启用按钮。 当用户取消选中所有复选框时,应禁用该按钮。

我在牛框架中使用MVVM模式。在事件的帮助下,我能够实现这一功能。

但我的问题是,我们能否在xaml本身处理这种情况。可能正在使用触发器或转换器吗?

我是WPF的新手,对WPF没有深入的了解。任何帮助表示赞赏。

我尝试过使用触发器。但由于复选框位于ListView内并定义为数据模板,因此我无法从按钮样式访问复选框的元素名称。

粗略轮廓如下

<ListView x:Name="MylistView" ItemsSource="{Binding Collection}" Height="250" 
              SelectionMode="Single" 
               BorderBrush="Transparent">
        <ListView.ItemTemplate>
            <DataTemplate>
                <CheckBox  x:Name="Checkbox" Content="{Binding Description}" IsChecked="{Binding IsEnable, Mode=TwoWay}" />
            </DataTemplate>
        </ListView.ItemTemplate>
</ListView>

<StackPanel Orientation="Horizontal">
        <Button x:Name="Save" Content="{l:Language Key=SAVE}" Width="50" Height="25" Margin="10" 
                 Command="{Binding Updpate, Source={StaticResource proxy}}">
<Button.Style>
//How do i refer checkbox from this level. I get only "Mylistview" control    at this level
   </Button.Style>
  </Button>
</StackPanel>

提前致谢

1 个答案:

答案 0 :(得分:1)

您必须使用PropertyChanged事件声明属性Visibility,实现为:

private bool _Visibility;
public bool Visibility
 { get 
      {
         return _Visibility ; 
      }
     set
      {
          _Visibility  = value;
           RaisePropertyChanged("Visibility");
      }
  }

internal void RaisePropertyChanged(string prop)
 {
     if (PropertyChanged != null)
      { 
        PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
      }
 }


public event PropertyChangedEventHandler PropertyChanged;

设计

<Button Name="btnsdf"  Width="35" Height="35" Style="{DynamicResource MetroCircleButtonStyle}" ToolTip="Add Denomination"  >
     <Image Width="30" Source="/Images/icons/add.png"  Margin="0,1,0,0"></Image>
     <Button.Resources>
          <Style TargetType="Button">
               <Style.Triggers>
                    <DataTrigger Binding="{Binding Visibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="true">
                         Setter Property="Visibility" Value="Visible"></Setter>
                     </DataTrigger>
                     <DataTrigger Binding="{Binding Visibility,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="false">
                         <Setter Property="Visibility" Value="Collapsed"></Setter>
                     </DataTrigger>
                </Style.Triggers>
            </Style>
       </Button.Resources>
  </Button>

您需要在Checkbox Checked和unchecked事件上设置IsEnabled。我希望这会给你一个想法。