[英]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.