编辑项目后如何刷新列表视图控件?
我开始使用 wpf listview 控件。我创建了一个“添加”按钮和一个“编辑”按钮。 “添加”按钮按预期工作 - 每当我将新项目添加到列表中时,它就会显示。 我的问题是“编辑”按钮 - 通知 listView 控件项目已更改的正确方法是什么? (它在附加代码中工作,我只是想知道是否有更好的方法)
这是我的代码:
Xaml:
<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>
代码隐藏:
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();
}
}
}
I started playing with the wpf listview control. 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? (it works in the attached code, i just wanted to know if there is a better way)
This is my code:
Xaml:
<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();
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的 PersonalDetails 类应实现 INotifyPropertyChanged 接口。
然后,当
Name
属性更改并且引发PropertyChanged
事件时,WPF 绑定基础结构将通过刷新演示文稿进行响应。Your PersonalDetails class should implement the INotifyPropertyChanged interface.
Then when the
Name
property changes and you raise thePropertyChanged
event the WPF binding infrastructure will respond by refreshing the presentation.XAML:
隐藏代码:
XAML:
Code Behind:
ListView.Items.Refresh();
帮助了我
ListView.Items.Refresh();
Helped me