gpt4 book ai didi

wpf - 如何访问 WPF App 和 ClassLibrary 的成员,反之亦然

转载 作者:行者123 更新时间:2023-12-03 11:00:10 25 4
gpt4 key购买 nike

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

我在我的 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 的引用,因为它会导致循环依赖。我怎样才能访问它?请帮忙!!

最佳答案

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

  • 分解出两个项目使用的公共(public)类型并将它们移动到新项目 C 中。让 A 和 B 引用 C。这应该删除从 A 到 B 的依赖关系或相反的依赖关系,甚至两个依赖关系。
  • 如果 A 和 B 具有需要交互的类型,则需要将此交互解耦为一组通用的抽象(例如接口(interface)或抽象基类)。然后,您应该将这些类型在没有任何实现的情况下移动到 A 和 B 都引用的项目 C 中。这将允许 A 和 B 中的类型进行交互,但仅使用 C 中的定义。一个示例可能是 A 是主应用程序。它调用接口(interface)IService在 C 中定义但在 B 中实现并注册回调 IServiceCallback通过 IService 在 C 中定义.然后 B 可以使用 IServiceCallback 回调 A不知道实现在 A 中。
  • 如果 A 和 B 中的类型强耦合,则应将 A 和 B 合并到一个项目中。
  • 关于wpf - 如何访问 WPF App 和 ClassLibrary 的成员,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12543600/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com