0

我从过去两周开始进入这个 wpf。我目前正在开发一个基于 MVVM 模式的 wpf 应用程序。我在 Visual C# 2010 中的解决方案中有 2 个项目。一个是 WPF 应用程序(可以说是 MSPBoardControl),另一个是类库(可以说是 ConnectViewComponent)。因此,MSPBardControl 和 ConnectViewComponent 都分别具有视图、视图模型和模型类。

我已经在我的 MSPBoardControl 中添加了 ConnectViewComponent 的引用,并且我能够在我的 MSBoardControl 的 View、Viewmodel 和模型类中访问 ConnectViewComponent 的成员变量。我关心的是如何从我的 ConnectViewComponent 访问 MSPBardControl 的成员变量。

MSBoardControl 的 ViewModel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using ConnectViewComponent.Model;
using System.Windows.Input;
using ConnectViewComponent.Commands;
[[[using MSPBoardControl.ViewModel;]]]

namespace ConnectViewComponent.ViewModel
{
public class ConnectViewModel : INotifyPropertyChanged
{
    public List<ConnectModel> m_BoardNames;
    [[[BoardControlViewModel mBoardVM;]]]

    public ConnectViewModel()
    {
        m_BoardNames = new List<ConnectModel>()
        {                
            new ConnectModel() {Name = "Bavaria", Connection_Status = "Disconnected"},
            new ConnectModel() {Name = "Redhook", Connection_Status = "Disconnected"},                
        };
    }

    public List<ConnectModel> BoardNames
    {
        //get set
    }

    private ConnectModel m_SelectedBoardItem;
    public ConnectModel SelectedBoard
    {
        //get set
    }

    private ICommand mUpdater;
    public ICommand ConnectCommand
    {
        get
        {
            if (mUpdater == null)
                mUpdater = new DelegateCommand(new Action(SaveExecuted), new Func<bool>(SaveCanExecute));

            return mUpdater;
        }
        set
        {
            mUpdater = value;
        }
    }

    public bool SaveCanExecute()
    {
        return true;
    }

    public void SaveExecuted()
    {
        if (SelectedBoard.Connection_Status == "Disconnected" && SelectedBoard.Name == "Bavaria")
        {
            SelectedBoard.Connection_Status = "Connected";                
        }

        else if (SelectedBoard.Connection_Status == "Disconnected" && SelectedBoard.Name == "Redhook")
        {
            SelectedBoard.Connection_Status = "Connected";               
        }
    }
}
}

我的代码中的 [[[ -- ]]] 表示我也无法访问 BoardControlViewModel 的成员以及 USING Namespace.ViewModel 。

我无法在我的 ConnectComponent 项目中添加 BoardControl 的引用,因为它会导致循环依赖。我怎样才能访问它?请帮忙!!

4

2 回答 2

2

在你的项目中存在循环依赖可能是一种“代码味道”。有多种方法可以去除这种“气味”。为简单起见,假设您有具有循环依赖关系的项目 A 和项目 B。

  1. 分解出两个项目使用的公共类型并将它们移动到新项目 C 中。让 A 和 B 引用 C。这应该删除从 A 到 B 的依赖关系或相反的依赖关系,甚至两个依赖关系。

  2. 如果 A 和 B 具有需要交互的类型,则需要将这种交互解耦为一组通用的抽象(例如接口或抽象基类)。然后,您应该将这些类型在没有任何实现的情况下移动到 A 和 B 都引用的项目 C 中。这将允许 A 和 B 中的类型进行交互,但仅使用 C 中的定义。一个示例可能是 A 是主应用程序。它调用在IServiceC 中定义但在 B 中实现的接口,并IServiceCallback通过 注册在 C 中定义的回调IServiceIServiceCallback然后 B 可以在不知道实现在 A 中的情况下使用回调到A。

  3. 如果 A 和 B 中的类型强耦合,则应将 A 和 B 合并到一个项目中。

于 2012-09-22T12:40:09.993 回答
1

您可以添加包含这些通用类的某种类型的“通用”库(项目)。所以 BoardControl 和 ConnectComponent 都可以引用它。

您也可以检查类似的问题

于 2012-09-22T12:23:40.600 回答