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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2020-11-24 C# MySql Dapper
2020-11-24 C# Serialize object via System.Text.Json
2019-11-24 WPF customize DelegateCommand
2019-11-24 C# loop executed one by one wait the former completed