簡體   English   中英

Caliburn micro 中的 ProgressChanged 不會更新進度條

[英]ProgressChanged in Caliburn micro doesn't update progressbar

我正在嘗試制作一個在 C# WPF 中工作的進度條,但它不起作用。

我的 xaml

<ProgressBar
    Height="15"
    Maximum="100"
    Minimum="0"
    Value="{Binding Path=Progress, Mode=OneWay}" />

我的視圖模型

public ShellViewModel()
{
    loadAirportInfosBgWk = new BackgroundWorker();
    loadAirportInfosBgWk.DoWork += loadAirportInfosBgWk_DoWork;
    loadAirportInfosBgWk.ProgressChanged += loadAirportInfosBgWk_ProgressChanged;
    loadAirportInfosBgWk.RunWorkerCompleted += loadAirportInfosBgWk_RunWorkerCompleted;
    loadAirportInfosBgWk.WorkerReportsProgress = true;
    loadAirportInfosBgWk.RunWorkerAsync();
}

private void loadAirportInfosBgWk_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    IsBusy = false;
}

private void loadAirportInfosBgWk_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    Progress = e.ProgressPercentage;
    Console.WriteLine($"{e.ProgressPercentage}%");
}

private void loadAirportInfosBgWk_DoWork(object sender, DoWorkEventArgs e) 
{
   IsBusy = true;
   // Do stuff
   loadAirportInfosBgWk.ReportProgress(prog); // prog is int between 0 and 100
}

// _ variables are private variable at the top I omitted them
public bool IsBusy
{
    get { return _isBusy; }
    set { 
        _isBusy = value;
        NotifyOfPropertyChange(() => IsBusy);
    }
}


public int Progress
{
    get { return _progress; }
    set {
        if (_progress != value)
        {
            _progress = value;
            NotifyOfPropertyChange(() => Progress);
        }
    }
}

奇怪的是RunWorkerCompleted正確隱藏了加載組件,但ProgressChanged沒有更新任何內容。 但控制台中已完成 function 正確記錄該值。 我對 Caliburn micro 真的很陌生,希望我能得到它並正確地做到這一點。 我查看了堆棧溢出,但沒有找到有用的答案。

**編輯: **

我試圖在 Label 中顯示屬性Progress ,它正在正確更新,但不是在進度條值中。 可能是由於我在 DataTemplate 中使用進度條的方式造成的。

詳細信息 xaml:

<xctk:BusyIndicator
Grid.RowSpan="2"
Margin="0,0,-0.2,25.6"
Panel.ZIndex="5"
DisplayAfter="0"
IsBusy="{Binding IsBusy}">
    <xctk:BusyIndicator.BusyContentTemplate>
        <DataTemplate>
            <StackPanel Margin="4">
                <TextBlock
                HorizontalAlignment="Center"
                FontWeight="Bold"
                Text="Downloading Email" />
                <StackPanel Margin="4">
                    <TextBlock Text="Chargement des données..." />
                    <ProgressBar
                    Height="15"
                    Maximum="100"
                    Value="{Binding Path=Progress}" />
                </StackPanel>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Button
                    Grid.Column="0"
                    Margin="0,0,2,0"
                    HorizontalAlignment="Right"
                    Content="Pause" />
                    <Button
                    Grid.Column="1"
                    Margin="2,0,0,0"
                    HorizontalAlignment="Left"
                    Content="Cancel" />
                </Grid>
            </StackPanel>
        </DataTemplate>
    </xctk:BusyIndicator.BusyContentTemplate>
    <xctk:BusyIndicator.OverlayStyle>
        <Style TargetType="Rectangle">
            <Setter Property="Fill" Value="#ffffeeee" />
        </Style>
    </xctk:BusyIndicator.OverlayStyle>
    <xctk:BusyIndicator.ProgressBarStyle>
        <Style TargetType="ProgressBar">
            <Setter Property="Visibility" Value="Collapsed" />
        </Style>
    </xctk:BusyIndicator.ProgressBarStyle>
</xctk:BusyIndicator>

謝謝。

通過在BusyIndicator中添加BusyContent="{Binding}"解決:

<xctk:BusyIndicator
    Grid.RowSpan="2"
    Margin="0,0,-0.2,25.6"
    Panel.ZIndex="5"
    BusyContent="{Binding}"
    DisplayAfter="0"
    IsBusy="{Binding IsBusy}">
   <!-- Code -->
</xctk:BusyIndicator>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM