У меня есть приложение WPF, которое зацикливает в Codebehind данные и увеличивает счетчик для каждого найденного элемента.
Теперь я хотел бы отобразить счетчик приращений в реальном времени в качестве обратной связи с пользователем.
Все, что я сейчас получаю, это значение после завершения моей задачи, потому что нам нужно запустить его в ожидании Задача.
Нажатие кнопки запускает метод, который зацикливает мои данные.
Могу ли я обновить счетчик в моем Xaml, если мой метод работает, а не после завершения?
Форма решения mm8:
Код позади:
public partial class UserControlCounter : UserControl, INotifyPropertyChanged
{
private int _scanStatusCounter;
public int ScanStatusCounter
{
get { return _scanStatusCounter; }
set { _scanStatusCounter = value; NotifyPropertyChanged(); }
}
public UserControlCounter()
{
InitializeComponent();
DataContext = this;
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Task.Run(getAll);
scanStatus.Text = "Persons " + ScanStatusCounter.ToString();
}
private async void getAll()
{
//grab data and iterate it
string[] string_array = new string[] { "a", "b", "c", "d", "e" }; // type = System.String[]
foreach (var i in string_array)
{
ScanStatusCounter++;
await Task.Delay(100);
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Вот мой Xaml для элемента управления:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" x:Name="scanStatus" Text="{Binding Path=ScanStatusCounter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBlock>
<Button Grid.Row="0" Grid.Column="1" Click="Button_Click"> Click Me</Button>
</Grid>
спасибо
Обновлено рабочее решение добавлено. Заранее благодарим mm8 за мою руку!