0

現在、メイン アプリケーション ウィンドウと、TreeView 内の特定のものを変更するために使用される「エディター」ウィンドウ (部門) の 2 つのウィンドウがあります。最近、すべてのサブ部門/ショーを非表示にする機能を実装しましたが、これらすべてを非表示/表示すると、リフレッシュ機能を使用するまで元の選択のみが非表示/表示されるという問題があります...だから私の質問は..とにかく、エディターの受け入れボタンを設定してこれらは両方とも2つの別々のファイルであるため、ページを更新します「エクスプローラー」という名前のTreeViewにアクセスできないようです

現在の更新方法:

        public void RefreshData()
    {
        explorer.Items.Clear();
        using (new SessionConnecter(session))
        {
            var topLevelDepartments = session.CreateCriteria(typeof(Department))
                .Add(NHibernate.Expression.Expression.Eq(Department.IS_TOP_LEVEL, true))
                .List<Department>();

            foreach (Department d in topLevelDepartments)
            {
                explorer.Items.Add(Fabric.ObjectProvider.Get<INodeWrapperFactory>().Create(d));
            }
        }
    }

現在の保存コード:

        void Save(object sender, ExecutedRoutedEventArgs e)
    {
        FocusManager.SetFocusedElement(GetWindow(savebutton), savebutton);
        if (!session.IsConnected)
            session.Reconnect();

        try
        {
            if (ValidateModel())
            {
                session.Save(model);
                if (pendingParent != null)
                {
                    model.Parent = pendingParent;
                    // session.Save(pendingParent); - should cascade
                }

                session.Flush();
                Close();
            }
        }
        catch (NHibernate.Classic.ValidationFailure ex)
        {
            if (pendingParent != null)
                session.Refresh(pendingParent);

            if (session.IsConnected)
                session.Disconnect();

            MessageBox.Show(this, ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Warning);
        }
    }
4

2 に答える 2

0

この場合、解決策としてメッセージを使用できます。Mvvm Light Toolkit のメッセージを見たことがありますか? これは、オブジェクトや他のウィンドウなどの距離を伝える良い方法です。静的クラス(すべてのアプリケーションで同じ)を作成して、独自のサブスクリプション/呼び出しメカニズムを実装することにより、セルフメッセージメカニズムを実装することができます...お役に立てば幸いです。

于 2012-10-08T14:30:18.640 に答える
0

両方のビューを同じオブジェクトにバインドしている場合、変更中のオブジェクトは単に OnProperyChanged イベントを発生させる必要があります。ビューが 2 つの異なるオブジェクト (ViewModel) にバインドされているが、それらの ViewModel が同じモデルを共有している場合、モデルが変更されたことを別の ViewModel から 1 つの ViewModel に通知する必要があります。

于 2012-10-08T13:57:43.963 に答える