这将在数据绑定和实现INotifyPropertyChanged的其他众多线程中得到解答。但是,我仍然难以让它工作。
基本上我有两个列表框,当用户从第一个列表框中选择服务器名称时,第二个列表框应该提供该服务器上的数据库列表。很简单。但是,第二个列表框没有显示更新的数据库列表。
这是代码: 代码执行查询并将数据添加到DatabaseList属性。
private void selection_Server_SelectionChangeCommitted(object sender, EventArgs e)
{
server = (string)selection_Server.SelectedItem;
try
{
ExecDBList(server, ref vm);
}
管理窗口使用的属性的类。
public class VM : INotifyPropertyChanged
{
private static List<string> _dblist;
public List<string> DatabaseList
{
get
{
return _dblist;
}
set
{
if (_dblist != value)
{
_dblist = value;
};
}
}
public VM() { }
void OnPropertyChanged(string PropertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
MainWindow初始化的代码行,用于分配列表框DataSource
selection_RDM.DataSource = vm.DatabaseList;
由于我很难理解以前对数据绑定和使用PropertyChangedEventHandler的答案,因此我们非常感谢任何帮助实现此功能。
谢谢 理查德
答案 0 :(得分:0)
在OnPropertyChanged();
上设置值后,尝试添加_dblist
:
public List<string> DatabaseList
{
get
{
return _dblist;
}
set
{
if (_dblist != value)
{
_dblist = value;
OnPropertyChanged("DatabaseList");
};
}
}
您无法调用通知,因此您的应用程序不会收到有关更改内容的通知
或更好
将您的OnPropertyChanged(string name)
更改为私有空NotifyPropertyChanged([CallerMemberName] String propertyName = "")
并且调用此方法时没有与我显示此类
相同位置的属性名称if (_dblist != value)
{
_dblist = value;
NotifyPropertyChanged();
};
答案 1 :(得分:0)
最近没有使用WinForms,但是使用WPF,你试过吗
RaisePropertyChanged(“DatabaseList”);
这样一来,在你重新获得私人列表条目之后,应该通知任何与它绑定的内容......嘿你的来源刚刚更新了......得到一份新的清单。