c# - 如何在编辑项目后刷新 ListView 控件?

标签 c# wpf xaml listview

我开始玩 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();

    }

}
}

最佳答案

您的 PersonalDetails 类应该实现 INotifyPropertyChanged界面。

然后,当 Name 属性更改并且您引发 PropertyChanged 事件时,WPF 绑定(bind)基础结构将通过刷新演示文稿来响应。

关于c# - 如何在编辑项目后刷新 ListView 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7371207/

相关文章:

c# - 在 WPF XAML 中禁用样式?

wpf - 在“添加新项目”窗口中找不到 ResourceDictionary

c# - WPF:使用 XAML 显示新窗口

c# - 访问 MVC 6 Web Api 中的查询字符串?

c# - 是否有自动为您格式化代码的 TFS checkin 策略?

c# - 正则表达式在 C# Azure 函数中包含一个(小写、大写、数字、给定的特殊字符)

c# - 奇怪的 C# 编译器错误 : cyclic inheritance

.net - 可编辑的组合框,绑定(bind)到不在列表中的值

c# - 如何绑定(bind)到通用 Windows 应用程序模板内的空值?

c# - 将可见性绑定(bind)到与 DataContext 不同的源