programing

MVVM 패턴을 사용하여 진행 표시줄을 구현하는 방법

bestprogram 2023. 4. 22. 11:00

MVVM 패턴을 사용하여 진행 표시줄을 구현하는 방법

MVVM 설계 패턴에 기반한 WPF 어플리케이션이 있습니다.

MVVM 패턴을 따르는 진행 표시줄을 앱에 구현하고 싶습니다.

이 구현 방법에 대해 제안해 주실 분 계십니까?

잘 부탁드립니다

일반적으로 UI는 VM 속성에 바인딩됩니다.

<ProgressBar Value="{Binding CurrentProgress, Mode=OneWay}" 
             Visibility="{Binding ProgressVisibility}"/>

VM은 를 사용하여 백그라운드 스레드에 대한 작업을 수행하고 정기적으로 업데이트를 수행합니다.CurrentProgress가치. 다음과 같은 것들이 있습니다.

public class MyViewModel : ViewModel
{
    private readonly BackgroundWorker worker;
    private readonly ICommand instigateWorkCommand;
    private int currentProgress;

    public MyViewModel()
    {
        this.instigateWorkCommand = 
                new DelegateCommand(o => this.worker.RunWorkerAsync(), 
                                    o => !this.worker.IsBusy);

        this.worker = new BackgroundWorker();
        this.worker.DoWork += this.DoWork;
        this.worker.ProgressChanged += this.ProgressChanged;
    }

    // your UI binds to this command in order to kick off the work
    public ICommand InstigateWorkCommand
    {
        get { return this.instigateWorkCommand; }
    }

    public int CurrentProgress
    {
        get { return this.currentProgress; }
        private set
        {
            if (this.currentProgress != value)
            {
                this.currentProgress = value;
                this.OnPropertyChanged(() => this.CurrentProgress);
            }
        }
    }

    private void DoWork(object sender, DoWorkEventArgs e)
    {
        // do time-consuming work here, calling ReportProgress as and when you can
    }

    private void ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        this.CurrentProgress = e.ProgressPercentage;
    }
}

를 사용하다ProgressBar제어 및 구속Value속성을 ViewModel 속성에 추가합니다.

보다

<ProgressBar Minimum="0" Maximum="0" Value="{Binding CurrentProgress}" />

뷰 모델

private double _currentProgress;
public double CurrentProgress
{
    get { return _currentProgress; }
    private set
    {
        _currentProgress = value;
        OnPropertyChanged("CurrentProgress");
    }
}

VM에 다음 두 가지 속성을 추가합니다.

bool IsProgressBarVisible
double ProgressValue

VM에서 장시간 작업을 시작하는 경우 IsProgressBarVisible-property를 true로 설정하고 ProgressValue periodical을 현재 진행률 값으로 설정합니다.0에서 100 사이의 값을 계산해 보십시오.이는 최소값과 최대값을 제공할 필요가 없다는 장점이 있습니다.비동기 조작이 완료되면 IsProgressBarVisible을 false로 설정합니다.

XAML 에서는, 이러한 2개의 속성에 바인드 합니다.값 변환기를 사용하여 부울 가시성을 가시성으로 변환합니다.

<ProgressBar Value="{Binding ProgressValue}" Visibility="{Binding IsProgressBarVisible,Converter={StaticResource BooleanToVisibility_ValueConverter}}"/> 

언급URL : https://stackoverflow.com/questions/3520359/how-to-implement-a-progress-bar-using-the-mvvm-pattern