我有一个WPF应用程序,它包含一个由一列按钮组成的Datagrid。相应的XAML代码如下。
<DataGridTemplateColumn Header="Closed" Width="60">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button>
<Button.Content>
<Image>
<Image.Source>
<MultiBinding Converter="{StaticResource ImageConverter}"
ConverterParameter="Closed">
<Binding Path="IsClosed"/>
<Binding Path="DataContext.TickImage" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"/>
<Binding Path="DataContext.CrossImage" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"/>
</MultiBinding>
</Image.Source>
</Image>
</Button.Content>
<Button.Command>
<Binding Path="DataContext.ClosedClicked" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>
</Button.Command>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
TickImage
和CrossImage
是图片来源,其中任何一个都是根据IsClosed
的值选择的。
现在,在ViewModel中,我需要编写一个代码来在单击按钮时切换图像(b / w TickImage
和CrossImage
)。换句话说,我需要一种方法来同时将Button与ICommand
和BitmapImage
变量绑定。
请帮助!!
答案 0 :(得分:4)
如果你的IsClosed
只是一个切换按钮来知道按钮是否被按下或释放,那么你可以通过使用下面的触发器实现这一目的:
<ToggleButton>
<ToggleButton.Content>
<Image>
<Image.Style>
<Style TargerType="Image">
<Setter Property="Source" Value="{Binding Path="DataContext.TickImage" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, RelativeSource="{RelativeSource AncestorType={x:Type ToggleButton}}" Value="true">
<Setter Property="Source" Value="{Binding Path="DataContext.CrossImage" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</ToggleButton.Content>
</ToggleButton>