Changing image source in xaml using a trigger does not work properly

I need to change the image on the toolbar according to some logical property in my viewModel. I use a trigger to change the image source. Is it correct? My code does not work correctly, sometimes it works, but sometimes the image remains unchanged.

<Image x:Key="startPauseResumeAnalysisToolbarImage" > <Image.Style> <Style TargetType="{x:Type Image}"> <Setter Property="Source" Value="Resources/ToolbarIcons/play.png" /> <Style.Triggers> <DataTrigger Binding="{Binding IsAnalysisRunning}" Value="True" > <Setter Property="Source" Value="Resources/ToolbarIcons/pause.png"/> </DataTrigger> </Style.Triggers> </Style> </Image.Style> </Image> 
+6
source share
1 answer

It should work. It's hard to see why this happens without the rest of the code. Do you implement the INotifyPropertyChanged interface in any class with the IsAnalysisRunning property?

Here is a small example that I used for testing:

MainWindow.xaml

 <Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:my="clr-namespace:WpfApplication2" Title="MainWindow" Height="350" Width="525"> <Grid> <Image > <Image.Style> <Style TargetType="{x:Type Image}"> <Setter Property="Source" Value="Desert.jpg" /> <Style.Triggers> <DataTrigger Binding="{Binding IsAnalysisRunning}" Value="True" > <Setter Property="Source" Value="Koala.jpg"/> </DataTrigger> </Style.Triggers> </Style> </Image.Style> </Image> <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="0,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> </Grid> </Window> 

MainWindow.xaml.cs:

 public partial class MainWindow : Window, INotifyPropertyChanged { public MainWindow() { InitializeComponent(); this.DataContext = this; } private bool _isAnalysisRunning = false; public bool IsAnalysisRunning { get { return _isAnalysisRunning; } set { _isAnalysisRunning = value; NotifyPropretyChanged("IsAnalysisRunning"); } } private void NotifyPropretyChanged(string property) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(property)); } public event PropertyChangedEventHandler PropertyChanged; private void button1_Click(object sender, RoutedEventArgs e) { IsAnalysisRunning = !IsAnalysisRunning; } } 
+4
source

Source: https://habr.com/ru/post/885891/


All Articles