简体   繁体   English

编辑项目后如何刷新列表视图控件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM