WPF show ImageSource via MVVM and timer
//xaml <Window x:Class="WpfApp45.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" WindowState="Maximized" xmlns:local="clr-namespace:WpfApp45" mc:Ignorable="d" Title="{Binding ISBN,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <Window.DataContext> <local:BookVM/> </Window.DataContext> <Border> <Border.Background> <ImageBrush ImageSource="{Binding ImgSource,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Stretch="Uniform" RenderOptions.BitmapScalingMode="Fant"/> </Border.Background> <TextBlock Text="{Binding ISBN,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="200" Foreground="Red"/> </Border> </Window> //cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.IO; namespace WpfApp45 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } public class BookVM : INotifyPropertyChanged { public BookVM() { InitData(); InitTimers(); } private void InitTimers() { System.Timers.Timer tmr = new System.Timers.Timer(); tmr.Elapsed += Tmr_Elapsed; tmr.Interval = 500; tmr.Start(); } private void Tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { if(++ImgIdx>=imgsCount) { ImgIdx = 0; } ImgSource=GetImagesSource(imgsList[ImgIdx]); ISBN = $"ISBN_{++calcIdx}"; } private void InitData() { imgsList = new List<string>(Directory.GetFiles(@"../../Images")); if(imgsList.Any()) { imgsCount = imgsList.Count; ImgSource = GetImagesSource(imgsList[imgIdx]); } } private ImageSource GetImagesSource(string imgUrl) { BitmapImage bmi = new BitmapImage(); bmi.BeginInit(); bmi.UriSource = new Uri(imgUrl, UriKind.RelativeOrAbsolute); bmi.EndInit(); if(bmi.CanFreeze) { bmi.Freeze(); } return bmi; } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { var handler = PropertyChanged; if (handler != null) { handler?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } private ImageSource imgSource; public ImageSource ImgSource { get { return imgSource; } set { if(value!=imgSource) { imgSource = value; OnPropertyChanged(nameof(ImgSource)); } } } private int imgIdx; public int ImgIdx { get { return imgIdx; } set { if(value!=imgIdx) { imgIdx = value; OnPropertyChanged(nameof (ImgIdx)); } } } private string isbn; public string ISBN { get { return isbn; } set { if(value!= isbn) { isbn = value; OnPropertyChanged(nameof(ISBN)); } } } private List<string> imgsList { get; set; } private int imgsCount { get; set; } private int calcIdx = 0; } }