数据绑定列表框Winforms

时间:2012-10-22 14:03:05

标签: c# winforms data-binding inotifypropertychanged

这将在数据绑定和实现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的答案,因此我们非常感谢任何帮助实现此功能。

谢谢 理查德

2 个答案:

答案 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”);

这样一来,在你重新获得私人列表条目之后,应该通知任何与它绑定的内容......嘿你的来源刚刚更新了......得到一份新的清单。