【问题标题】:Global access to WPF control [closed]全局访问 WPF 控件 [关闭]
【发布时间】:2017-07-30 19:15:17
【问题描述】:

我已经尝试了很长时间的很多选择,这是我想到的最后一个,所以我会尝试问: 我正在尝试在 WPF 中开发一个 MVVM 项目,并且我已经下载了一个现成的 WPF 控件 (GMap.NET)。但是,这个控件不准备在 MVVM 中使用它,而且我是一个新手,所以我不想自己修改源代码。该控件需要设置很多参数(不能通过XAML访问,所以我不能简单地绑定它们),并在控件对象上调用一些函数。所以这是我的问题:

如何从代码中的任何位置访问 WPF 控件实例并从那里进行管理?

特别是,我想从 ViewModel 部分访问 View 元素,我知道它会破坏模式,但我不知道如何避免它,而且我的时间不多了。

【问题讨论】:

  • @PeterDuniho,我的问题有问题吗?
  • 该控件有很多依赖属性..因此它可以在使用 MVVM 的 XAML 中使用。你到底想归档什么是不可能的?
  • @JanDotNet,这是我更具体的问题:stackoverflow.com/questions/45152773/… 我已经问过这个问题,希望得到更通用的解决方案。
  • 我想从 ViewModel 部分访问一个 View 元素,它不是 mvvm,所以如果你想这样做,就把你的袜子脱掉。做任何你需要做的事情,但是你需要做。真的,模式为我们服务,我们不为模式服务。如果您想保持这种模式,下面的答案是针对这种情况存在的唯一答案。没有必要就这个主题提出第三个问题:/
  • @Will,在另一个问题中的 GMap.NET 的特定情况下,该问题已经解决。一般情况的答案是另一回事。谢谢。

标签: c# wpf mvvm user-controls wpf-controls


【解决方案1】:

不知道具体控制很难说。但总的来说,我看到 2 个选项可以使这样的控制 MVVM 符合:

  1. 子类化控件并添加依赖属性,使其可以在 XAML 中使用
  2. 创建一个“容器控件”,用于包装 unMVVMable 控件并提供所需的依赖属性。

但是,如果控件的API很复杂,不仅有属性,还有一些方法,在这里打破MVVM可能比较务实。 MVVM 并不是从视图中分离 GUI 相关逻辑的唯一方法。例如,您可以使用接口抽象使用的功能,并在您的视图模型中使用该接口。

【讨论】:

  • "不知道具体控件"-正如我在 GMap.NET 的问题中所写的那样,“您可以使用接口抽象使用的函数并在您的视图模型中使用该接口。”-可以你说得具体点?
  • 您编写了“GMap.NET”...但快速搜索仅显示具有该名称的 WinForms 控件。你是说那个吗?我链接到具体控件很有帮助:)。
  • 你的意思是that one?如果是这样,在您的问题中提供链接是有意义的;)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
相关资源
最近更新 更多