Я новичок в wpf и С#, а также спрашиваю здесь. Я ищу в Интернете в течение нескольких часов, и я не нашел решения для моей проблемы. У меня есть индикатор выполнения, который обновляет свое значение всякий раз, когда цикл увеличивается, и текстовый блок, который обновляет его текст (например, строки чтения 5/3000). В настоящее время у меня нет пути привязки, поэтому я делаю фиктивную привязку в своем xaml. Я не знаю точно, как заставить его работать.
Вот мой XAML:
<xctk:BusyIndicator x:Name="_busyIndicator" Grid.Row="4">
<xctk:BusyIndicator.BusyContentTemplate>
<DataTemplate>
<StackPanel Margin="4">
<TextBlock Text="Parsing OTM File" FontWeight="Bold" HorizontalAlignment="Center" />
<StackPanel Margin="4">
<TextBlock Text="{Binding NumberOfLinesOfStringInTextFile}" />
<ProgressBar Grid.Row="4" Name="prgParse" Height="15" Value="{Binding CurrentLineNumberAddedToListView}" />
</StackPanel>
</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>
<ListBox x:Name="_listBox" />
</xctk:BusyIndicator>
У меня есть кнопка, которая запускает цикл, который читает строки внутри текстового файла (в данном случае он имеет более 3000 строк) и помещает строку строки в список. Я хочу обновить текстовый блок в моем xaml, в котором указано «Чтение строк 300/3000», и индикатор выполнения, указывающий его процент, который обновляет свое значение до 10 или 10%, пока он передает данные в список.
Вот мой код:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private void cmdBrowse_Click(object sender, RoutedEventArgs e)
{
var OpenOTM = new Microsoft.Win32.OpenFileDialog();
OpenOTM.DefaultExt = ".otm";
OpenOTM.Filter = "OTM Files (*.otm)|*.otm|TEXT Files (*.txt)|*.txt";
if (OpenOTM.ShowDialog().GetValueOrDefault(false))
{
txtFilePath.Text = OpenOTM.FileName;
}
}
private void cmdOk_Click(object sender, RoutedEventArgs e)
{
WithAdjustments wa = new WithAdjustments();
BackgroundWorker worker = new BackgroundWorker();
string[] lines = System.IO.File.ReadAllLines(txtFilePath.Text);
worker.DoWork += (o, ea) =>
{
List<String> listOfString = new List<string>();
foreach (string lin in lines)
{
listOfString.Add(lin);
Thread.Sleep(2);
}
Dispatcher.Invoke((Action)(() => _listBox.ItemsSource = listOfString));
};
worker.RunWorkerCompleted += (o, ea) =>
{
_busyIndicator.IsBusy = false;
};
_busyIndicator.IsBusy = true;
worker.RunWorkerAsync();
}
}
Заранее спасибо! Я надеюсь, что кто-то может мне помочь :)