0

这将在其他许多关于数据绑定和实现 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 初始化代码行

            selection_RDM.DataSource = vm.DatabaseList;

由于我正在努力理解以前对数据绑定和使用 PropertyChangedEventHandler 的答案,因此任何有助于使其正常工作的帮助都将不胜感激。

谢谢理查德

4

2 回答 2

0

OnPropertyChanged();像这样设置值后尝试添加_dblist

public  List<string> DatabaseList
{
    get
    {
        return _dblist;
    }
    set
    {
        if (_dblist != value)
        {
            _dblist = value;
            OnPropertyChanged("DatabaseList");
        };
    }
}

没有地方可以调用 notify,因此您的应用程序不会收到有关更改的通知

或更好

改变你OnPropertyChanged(string name)的私人无效NotifyPropertyChanged([CallerMemberName] String propertyName = "")

并在我向您展示的相同位置调用此方法而不使用该属性的名称

if (_dblist != value)
{
    _dblist = value;
    NotifyPropertyChanged();
};
于 2012-10-22T14:15:35.583 回答
0

最近没有工作WinForms,但使用WPF,你试过吗

RaisePropertyChanged("DatabaseList");

这样,在您请求私有列表条目后,应该通知绑定到它的任何内容......嘿,您的源刚刚更新......也获得一个新的列表。

于 2012-10-22T16:54:43.607 回答