0

これは、データバインディングと INotifyPropertyChanged の実装に関する他の多数のスレッドで回答されています。しかし、私はまだこれを機能させるのに苦労しています。

ユーザーが最初のリストボックスからサーバー名を選択すると、2番目のリストボックスはそのサーバー上のデータベースのリストを提供することになっています。ものすごく単純。ただし、2 番目のリストボックスには、更新されたデータベースのリストが表示されません。

コードは次のとおりです。クエリを実行し、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;

リストボックス DataSource を割り当てる 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");
        };
    }
}

通知を呼び出す場所がないため、変更されたものについてアプリケーションに通知されません

以上

OnPropertyChanged(string name)プライベートボイドに変更NotifyPropertyChanged([CallerMemberName] String propertyName = "")

そして、私があなたのように見せたのと同じ場所で、プロパティの名前なしでこのメソッドを呼び出します

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

最近WinFormsが動かないけどWPFで動いてる、やってみた?

RaisePropertyChanged( "データベースリスト" );

このようにして、非公開リストのエントリを再クエリした後、それにバインドされているものはすべて通知されます...ソースが更新されたばかりです...それの新しいリストも取得してください。

于 2012-10-22T16:54:43.607 に答える