我有一个情况。
我有一个带复选框的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>
提前致谢
答案 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。我希望这会给你一个想法。