0

Как сделать чтобы выводило текст в каждой строке по порядку, т.е. сперва: Строка № - 1, Строка № - 2 и т.д..., у меня получилось, что появляются все сразу 10 строк. Что я делаю не правильно? введите сюда описание изображения

<Window x:Class="TestVoid.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:TestVoid"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
    <local:MainViewModel/>
</Window.DataContext>
<Grid DataContext="{Binding AllModel}">
    <Grid.RowDefinitions>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <ListView ItemsSource="{Binding Temp, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>

 public delegate void TestDelegateVoid(string message);
public class Test
{
    public void TestVoid(TestDelegateVoid method)
    {
        for (int i = 0; i < 10; i++)
        {
            method(String.Format($"Строка № - {i} "));
            Thread.Sleep(10);
        }
    }
}

  public class Model
    {
        public delegate int TestDelegate(string message);

        List<string> temp = new List<string>();
        public List<string> Temp { get => temp; set { temp = value; } }
    public Model()
    {
        Main();
    }

        void Main()
        {
            Test test = new Test();
            TestDelegateVoid method = ShowMessage;
            test.TestVoid(method);
        }
        void ShowMessage(string message)
        {
            Temp.Add(message);
        }
    }
  • Если это должна быть строка, то и отображайте ее как строку. Сделайте свойство, например public string StringTemp => string.Join(",", Temp); и привязывайте его к текстовому представлению (например TextBlock). Если вам это нужно отображать все же как массив, то переопределите у вашего ListView в XAML ItemsPanel, задав например там <StackPanel Orientation="Horizontal" />, тогда все ваши элементы будут отображены в один ряд. – EvgeniyZ Dec 18 '19 at 15:55
  • Я прошу прощения, но мне не получается правильно составить вопрос, я хотел что бы текст который появляется в столбике на картинке которую я привязал, печатался поочередно т.е сперва строка 1, далее предположим через две секунды строка 2 и т.д. – Евгений Dec 18 '19 at 15:59
  • Вы в метод sleep передаёте значение "10". Там время задаётся в миллисекундах т.е. 1/1000 секунды. Так что строки у вас появляются с задержкой 1/100 секунды, поэтому вы этого не замечаете. Попробуйте увеличить задержку до секунды – karvetskiy Dec 18 '19 at 16:00
  • Я увеличил до 1000, компилятор запускает -> потом за кадром долгое ожидание и после уже появляется весь текст. – Евгений Dec 18 '19 at 16:10

1 Answers1

0
public async void TestVoid(TestDelegateVoid method)
{
    for (int i = 0; i < 10; i++)
    {
        method(String.Format($"Строка № - {i} "));
        await Task.Delay(1000);
    }
}
tym32167
  • 32,857