WPF दृश्य अपडेट नहीं हो रहा है, हालांकि INotifyPropertyChanged कार्यान्वित किया गया है (.NET 5.0) [डुप्लिकेट]

Jan 05 2021

मेरे विचार में मेरे पास एक प्रोग्रेसबेर है जो मेरे प्रमोशन में एक "प्रोग्रेस" प्रॉपर्टी को बांधता है। दृश्यमॉडल INotifyPropertyChanged को लागू करता है और जब संपत्ति परिवर्तित की जाती है, तो OnPropertyChanged () कहा जाता है।

हालाँकि बंधन काम करता है, लेकिन शायद ही कभी प्रोग्रेसबार नियंत्रण की प्रगति को अद्यतन करता है। यह केवल नियमित रूप से अपडेट होता है जब मैं माउस के साथ खिड़की के चारों ओर घूम रहा हूं।

मेनविंडो। Xaml

<Window
    x:Class="WpfTest.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:local="clr-namespace:WpfTest"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="500"
    Height="500"
    WindowStartupLocation="CenterScreen"
    mc:Ignorable="d">
    <Grid>
        <ProgressBar Value="{Binding Progress}"/>
    </Grid>
</Window>

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new MainWindowViewModel();
    }
}

MainWindowViewModel.cs

class MainWindowViewModel : INotifyPropertyChanged
{
    private readonly Timer updateProgressBarTimer;
    private int progress;

    public int Progress
    {
        get => progress;
        set
        {
            this.progress = value;
            OnPropertyChanged();
        }
    }

    public MainWindowViewModel()
    {
        updateProgressBarTimer = new Timer(OnUpdateProgressBarTimerTick, null, 0, 50);
    }

    private void OnUpdateProgressBarTimerTick(object state)
    {
        this.Progress += 2;
        if (this.Progress > 100)
            this.Progress -= 100;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

मैंने INotifyPropertyChanged का बहुत उपयोग किया है और आमतौर पर इसके साथ कभी भी समस्या नहीं होती है लेकिन मैं यहाँ समस्या नहीं देख सकता।

कोई सुझाव कैसे इस मुद्दे को ठीक करने के लिए?

जवाब

2 soaringmatty Jan 05 2021 at 21:26

System.Threading.TimerDispatcherTimer(के साथ DispatcherPriority.Normal) को बदलने से समस्या हल हो गई।

आपके सुझावों के लिए धन्यवाद