如何在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
相关产品推荐
相关产品推荐

