You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF应用中向ObservableCollection添加新条目并更新UI

解决WPF中ObservableCollection添加条目不显示的问题

你的问题核心在于你新建了一个NameList实例,但UI绑定的是XAML中定义的静态资源NameListData,两个是完全独立的对象,所以新添加的项不会同步到UI上。下面是正确的解决方法:

正确的添加逻辑

不要创建新的NameList,而是获取XAML中已经存在的那个绑定实例,然后向它添加新条目:

// 获取XAML中定义的NameListData静态资源
var existingNameList = (NameList)this.FindResource("NameListData");
// 添加新的空条目
existingNameList.Add(new SetCredentialsForAD("", "", ""));

这样操作的是UI绑定的同一个集合实例,由于NameList继承自ObservableCollection,它会自动通知UI更新,新条目就会显示出来了。

额外优化建议

为了让你的数据绑定更完善,建议给SetCredentialsForAD类实现INotifyPropertyChanged接口,这样当你修改条目的属性值时,UI也能实时同步更新:

public class SetCredentialsForAD : INotifyPropertyChanged
{
    private string loginName;
    private string passWord;
    private string domainName;

    public SetCredentialsForAD(string domain, string lName, string pWord)
    {
        this.domainName = domain;
        this.loginName = lName;
        this.passWord = pWord;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public string DomaineName 
    { 
        get { return domainName; } 
        set 
        { 
            domainName = value;
            OnPropertyChanged(nameof(DomaineName));
        } 
    }
    public string LoginName 
    { 
        get { return loginName; } 
        set 
        { 
            loginName = value;
            OnPropertyChanged(nameof(LoginName));
        } 
    }
    public string PassWord 
    { 
        get { return passWord; } 
        set 
        { 
            passWord = value;
            OnPropertyChanged(nameof(PassWord));
        } 
    }
}

另外,你的NameList构造函数里有重复代码,可以简化一下:

public partial class NameList : ObservableCollection<SetCredentialsForAD>
{
    public NameList() : base()
    {
        using var forest = Forest.GetCurrentForest();
        foreach (Domain objDomain in forest.Domains)
        {
            Add(new SetCredentialsForAD("domain", "name", "password"));
        }
    }
}

内容的提问来源于stack exchange,提问作者user3091744

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:22:44