[英]How to refresh a listview control after editting an item?
I started playing with the wpf listview control.我开始玩 wpf listview 控件。 I've created an "add" button and an "edit" button.
我创建了一个“添加”按钮和一个“编辑”按钮。 The "add" button works as expected - whenever I'm adding a new item to the list it gets displayed.
“添加”按钮按预期工作 - 每当我向列表中添加新项目时,它就会显示出来。 My problem is with the "edit" button - what is the correct way of informing the listView control that an item was changed?
我的问题是“编辑”按钮 - 通知 listView 控件某个项目已更改的正确方法是什么? (it works in the attached code, i just wanted to know if there is a better way)
(它适用于附加的代码,我只是想知道是否有更好的方法)
This is my code:这是我的代码:
Xaml: Xml:
<Window x:Class="WpfApplication5.MainWindow" Name="This"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
>
<Grid>
<ListView Name="Mylist"
ItemsSource= "{Binding ElementName=This, Path=People}"
SelectionMode="Single"
>
<ListView.View>
<GridView AllowsColumnReorder="false">
<GridViewColumn
Header="Name"
Width="Auto"
DisplayMemberBinding="{Binding Path=Name}" />
<GridViewColumn
Header="Id"
Width="Auto"
DisplayMemberBinding="{Binding Path=Id}" />
</GridView>
</ListView.View>
</ListView>
<StackPanel Orientation="Horizontal" Height="45" Margin="190,133,197,133">
<Button
Content="Add"
Click="AddButton_Click"
/>
<Button
Content="Edit"
Click="EditButton_Click"
/>
</StackPanel>
</Grid>
</Window>
Code Behind:背后的代码:
namespace WpfApplication5
{
public class PersonalDetails
{
public string Name {get; set;}
public string Id {get; set;}
}
public partial class MainWindow : Window
{
private ObservableCollection<PersonalDetails> people = new ObservableCollection<PersonalDetails>();
public ObservableCollection<PersonalDetails> People
{
get { return this.people; }
}
public MainWindow()
{
PersonalDetails p1 = new PersonalDetails();
p1.Name = "Jeff";
p1.Id = "111";
people.Add(p1);
InitializeComponent();
}
private void AddButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
PersonalDetails p2 = new PersonalDetails();
p2.Name = "Tom";
p2.Id = "222";
people.Add(p2);
}
private void EditButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
PersonalDetails pItem = (PersonalDetails)Mylist.SelectedItem;
if (pItem == null)
{
return;
}
pItem.Name = "Dan";
Mylist.Items.Refresh();
}
}
}
Your PersonalDetails class should implement the INotifyPropertyChanged interface.您的 PersonalDetails 类应该实现INotifyPropertyChanged接口。
Then when the Name
property changes and you raise the PropertyChanged
event the WPF binding infrastructure will respond by refreshing the presentation.然后,当
Name
属性更改并且您引发PropertyChanged
事件时,WPF 绑定基础结构将通过刷新演示文稿来响应。
XAML: XAML:
<ListView Name="listResult" ItemsSource="{Binding ItemsCollection}"></ListView>
Code Behind:背后的代码:
private ObservableCollection<object> itemsCollection = new ObservableCollection<object>();
public ObservableCollection<object> ItemsCollection
{
get { return this.itemsCollection; }
}
private void UpdateSectionsList()
{
List<object> tempList = ... //Put your element here
// clear the list before and reload the object you want to display
itemsCollection.Clear();
if (tempList.Count > 0)
{
foreach (object item in tempList)
{
itemsCollection.Add(item);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.