簡體   English   中英

編輯項目后如何刷新列表視圖控件?

[英]How to refresh a listview control after editting an item?

我開始玩 wpf listview 控件。 我創建了一個“添加”按鈕和一個“編輯”按鈕。 “添加”按鈕按預期工作 - 每當我向列表中添加新項目時,它就會顯示出來。 我的問題是“編輯”按鈕 - 通知 listView 控件某個項目已更改的正確方法是什么? (它適用於附加的代碼,我只是想知道是否有更好的方法)

這是我的代碼:

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>

背后的代碼:

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();

    }

}
}

您的 PersonalDetails 類應該實現INotifyPropertyChanged接口。

然后,當Name屬性更改並且您引發PropertyChanged事件時,WPF 綁定基礎結構將通過刷新演示文稿來響應。

XAML:

<ListView Name="listResult"  ItemsSource="{Binding ItemsCollection}"></ListView>

背后的代碼:

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