<ListView x:Name="listView1">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Animal" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Width="90" DisplayMemberBinding="{Binding Id}">
<Label Width="90" Background="Aqua" HorizontalContentAlignment="Left">
ID
</Label>
</GridViewColumn>
<GridViewColumn Header="Counter" Width="60" DisplayMemberBinding="{Binding Counter}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
listView1.Items.Add(new Animal("Козёл", 0, (s, n) =>
{
Application.Current.Dispatcher.Invoke(() =>
{
Animal? animal = s as Animal;
System.Diagnostics.Debug.WriteLine($"{animal?.Name}: {n}");
listView1.Items.Refresh();
});
}));
listView1.Items.Add(new Animal("Жираф", 1, null));
listView1.Items.Add(new Animal("Бегемот", 2, null));
}
}
public class Animal
{
public string Name { get; }
public int Id { get; }
public int Counter { get; private set; } = 0;
public Animal(string name, int id, Action<object, int>? progress)
{
Name = name;
Id = id;
Task.Run(() =>
{
Random r = new Random();
int delay = r.Next(500, 1000);
while (true)
{
Counter++;
progress?.Invoke(this, Counter);
Thread.Sleep(delay);
}
});
}
Как обновить только тот элемент, от которого пришло событие?
Как написать произвольный текст в произвольной ячейке? Например, не просто 150
, а 150 GB
? То есть, исходя от значения поля класса, вывести какой-то текст, а не само это значение.