我知道可以通过使用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更简单的方式解决它?
答案 0 :(得分:1)
为什么不使用ToggleButton
并将IsChecked
属性绑定到viewModel的IsToDelete
属性?
ItemsControl
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ToggleButton Content="X" IsChecked="{Binding Path=IsToDelete}"/>
<Border Width="100"
Background="MediumPurple"
Margin="5">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsToDelete}" Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 1 :(得分:0)
您可以使用Button的Click事件处理程序。那你就不需要任何命令了。
private void bt_Delete_Click(object sender, RoutedEventArgs e)
{
var btn = sender as Button;
YourClass dc = btn.DataContext as YourClass;
dc.IsToDelete = true;
}
我真的不喜欢这个解决方案,但我想,它会起作用。