Есть ListView в который записывается данные, дело в том что нету возможности записать все сразу, по этому необходимо изменять/обновлять данные которые уже были внесены в ListView. Как это лучше всего сделать?
<ListView x:Name="ClientsInfo">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=ConnectionID}">ID</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=ClientName}">Name</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=Version}">Version</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=ComputerID}">Computer ID</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=ClientIP}">Client IP</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=PingTime}">Ping Time</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
public class ClientsInfo
{
public string ConnectionID { get; set; }
public string ClientName { get; set; }
public string Version { get; set; }
public string ComputerID { get; set; }
public string ClientIP { get; set; }
public string PingTime { get; set; }
}
ClientsInfo.Items.Add(new ClientsInfo
{
ConnectionID = clientNumber.ToString(),
ClientName = "Receiving...",
Version = "Receiving...",
ComputerID = "Receiving...",
ClientIP = clientIP,
PingTime = "..."
});
ClientsInfo.Items.Refresh();
...
ClientsInfo.Items.Add(new ClientsInfo
{
ClientName = clientsName,
Version = versionStr,
ComputerID = computerName,
});
ClientsInfo.Items.Refresh();
...
ClientsInfo.Items.Add(new ClientsInfo
{
PingTime = $"{elapsedTimeInMilliseconds:0.##}ms"
});
ClientsInfo.Items.Refresh();
Пример. Сущность:
public class User : INotifyPropertyChanged
{
private string name;
public string Name
{
get => name;
set
{
name = value;
// Уведомляем об изменении свойства
NotifyPropertyChanged();
}
}
private int age;
public int Age
{
get => age;
set { age = value; NotifyPropertyChanged(); }
}
#region Реализация INPC — обычно выносится в отдельный базовый класс
private void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
Окно:
public partial class MainWindow : Window
{
private ObservableCollection<User> users = new ObservableCollection<User>();
public MainWindow()
{
InitializeComponent();
myListView.ItemsSource = users;
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
users.Add(new User { Name = "Василий", Age = 25 });
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
users.Add(new User { Name = "Петр", Age = 37 });
}
private void Button3_Click(object sender, RoutedEventArgs e)
{
users[1].Name = "Иван";
}
private void Button4_Click(object sender, RoutedEventArgs e)
{
users.RemoveAt(0);
}
}
Разметка окна:
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListView Name="myListView">
<ListView.View>
<GridView>
<GridViewColumn Header="Имя" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Возраст" DisplayMemberBinding="{Binding Age}"/>
</GridView>
</ListView.View>
</ListView>
<UniformGrid Grid.Row="1" Rows="1" Margin="0,5,0,0">
<UniformGrid.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="2.5,0"/>
</Style>
</UniformGrid.Resources>
<Button Content="1" Click="Button1_Click"/>
<Button Content="2" Click="Button2_Click"/>
<Button Content="3" Click="Button3_Click"/>
<Button Content="4" Click="Button4_Click"/>
</UniformGrid>
</Grid>
Как видно по коду, мы работаем только со строготипизированной коллекцией users
, все изменения в GUI подхватываются автоматически.
Следующий шаг — разделение GUI и логики приложения. Все действия описываем в виде команд, все данные помещаем в отдельные классы (а не как сейчас коллекция в классе окна). Ну и апогей этого подхода — шаблон MVVM.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Будет кнопка, и если удержать на этой кнопке мышку секунду где-то 05 будет появляться окно с текстом
На GitHub есть репозиторий с реализацией декодирования фреймов протокола WebSocketПроблема в том, что если в один момент времени отправляется много...
я составляю cms на laravel c возможность расширяться через плагиныВозник вопрос, у меня есть пользователи и каждому можно задавать роли админ...
Подскажите где взять номальную документацию по роботе с АПИ для оплаты по American Express? И существует ли оно вообще? Или это АПИ закрытое? Можете...