Приложение анализирует файлы CSV и XML. Поскольку файлов много, индикатор выполнения должен обновляться шаг за шагом. Приложение WPF в основном для пользовательского интерфейса и связанных с ним событий. Другой класс фактически реализует логику.
Я применил делегат для обновления значения. Делегат получает целочисленное значение для обновления индикатора выполнения, но пользовательский интерфейс не показывает изменений.
MainWindow.xaml:
<Grid Margin="20">
<ProgressBar Height="50" Width="400" Minimum="0" Maximum="100" Name="pbStatus" />
<TextBlock Text="{Binding ElementName=pbStatus, Path=Value, StringFormat={}{0:0}%}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
Class2 fileConvert = new Class2();
public MainWindow()
{
InitializeComponent();
fileConvert.UpdateProgress += UpdateProgress;
}
private void UpdateProgress(int ProgressPercentage)
{
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate ()
{
pbStatus.Value = ProgressPercentage;
}));
}
private void BtnConvert_Click(object sender, RoutedEventArgs e)
{
var newFiles = fileConvert.ProcessConvertInfo(allFiles, destiString);
}
}
Class2:
public class Class2
{
public delegate void UpdateProgressDelegate(int ProgressPercentage);
public event UpdateProgressDelegate UpdateProgress;
public List<string> ProcessConvertInfo(string[] csvfiles, string destiPath)
{
foreach (string filePath in csvfiles)
{
//Progressbar value
int i = Array.IndexOf(csvfiles, filePath);
//Passing value to Delegate
UpdateProgress(i++);
}
}
}
Этот метод ниже в MainWindow.xaml.cs получает значение ProgressPercentage для каждой итерации файлов в списке другого Class2 и назначается значению индикатора выполнения.
private void UpdateProgress(int ProgressPercentage)
{
Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate ()
{
pbStatus.Value = ProgressPercentage;
}));
}
Индикатор выполнения ничего не показывает. Я не получаю никакой ошибки. Я новичок в WPF. Как я могу найти проблему?