【发布时间】:2016-09-30 13:58:49
【问题描述】:
我知道通过使用 ICommand 可以做到这一点,但由于这是我整个项目中唯一需要这样做的地方,我问自己,是否有比实施 RelayCommand 和 ICommand 更好的解决方案和我原本只有属性的类中的附加方法?
也许我的情况可能会有所帮助: 我有一个绑定到属性列表的 ListView(这是我为显示这些属性而制作的自定义类)。 我在每行条目中有一个按钮,我想将“IsToDelete”-Property 设置为 true。
如果 "IsToDelete" 为真,我在 ListView 中显示的所有控件都将折叠。
整个逻辑在 DataTemplates 中到此为止,我的按钮看起来像这样:
<DataTemplate x:Key="DeleteButtonTemplate">
<Button Name="bt_Delete"
Command="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=ItemSource.DeleteClicked}">
<Image Height="16" Width="16" Source="Images\RecycleBin\VSO_RecycleBin_16x.png"/>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsToDelete}" Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</DataTemplate>
请注意,此 DataTemplate 中的命令当前未按预期工作,这就是我什至提出问题的原因;)
在最佳情况下,我只需要执行以下操作:
<Setter Property="{Binding IsToDelete}" Value="True"/>
那么,有没有办法像这样或至少以比 ICommand 和 RelayCommand 更简单的方式来解决它?
【问题讨论】:
-
点击
Button后是否要将Button的Visibility设置为Collapsed? -
你如何将数据上下文分配给页面/按钮,这个命令在哪里定义了 IsToDelete 属性?
-
@StepUp 是的,这正是我想要做的,但由于这不是唯一要更改的控件,我需要将布尔值 IsToDelete 设置为 true。
-
@KyloRen 我将代码隐藏中的 Itemssource 分配给列表视图,从中复制此模板。我将 ICommand 作为简单属性添加到属性类中,IsToDelete-Boolean 也在这个类中。
-
@ExoWork 您的按钮获取的数据上下文是什么? IsToDelete 属性在哪里定义?
标签: wpf xaml data-binding datatemplate