【问题标题】:Ways to attached an ICommand to a control in XAML将 ICommand 附加到 XAML 中的控件的方法
【发布时间】:2013-03-13 17:25:44
【问题描述】:

我对 XAML 很陌生。为了在利用 XAML 的同时利用 MVC 架构和命令模式,我已经开始将静态 ICommand 绑定到按钮。我正在做一个有一百多个按钮的相当大的项目。我的问题是:是否有不同的方法将命令绑定到按钮以避免静态对象。关于 C#、WPF 和 XAML,静态是常用的吗?我确定有人已经使用 MVC、命令模式和 XAML 参与过一个项目,您的方法是什么?

我应该早点编辑这个,但是在处理这个项目时,当我问这个问题时,我意识到我对 c#、WPF 和 XAML 有多少了解。显然,在 WPF 中,实例属性使其方便地将方法和数据成员绑定到控件。

就 MVC / MVVM 而言,我想在我知道它是什么之前,我很犹豫是否将我的模型暴露给 VM。

【问题讨论】:

  • 我了解 MVVM 和 XAML 是 WPF 中最常用的。但是,我有一个模型、一个控制器、一个视图和一堆实现 ICommand 的命令类。我正在利用 XAML 创建将自定义命令类的静态对象绑定到的按钮。我更担心将数百个静态对象(我的自定义命令)绑定到在 XAML 中创建的控件的缺点。另外,我想知道是否有人在使用 XAML 和 MVC 而不是 XAML 和 MVVC。我正在尝试利用 XAML,而不是过多依赖 WPF 默认使用的 MVVC。
  • 非常感谢您的回复。谢谢!我已经建立了架构,并且我的程序运行良好(看起来如此)。我对 WPF 和 XAML 本身没有问题。但是,由于这是我的第一个 WPF/XAML 项目,我更关心如何使用它。简单地说,我使用 XAML 是因为它提供了简单而丰富的 UI 功能。可能没有充分的理由担心超过一百个静态对象,但不知何故它困扰着我。
  • @Big Daddy “WPF 不使用 MVVM 或默认情况下”难道不是在设计模式下,一旦你点击一个按钮并创建了后面的代码,你就在使用 MVVM 吗?

标签: wpf asp.net-mvc xaml icommand command-pattern


【解决方案1】:

我认为您的意思是适用于 WPF 的 MVVM 模式。也就是模型视图视图模型

  1. Model = 用于为被操作的数据构建表单模型
  2. View = Presentation(通常是一个主窗体和许多用户控件窗体)
  3. ViewModel = 演示者的代码容器(包含代码的类)

通常,您的绑定会取代从基础实现 RelayCommand 的 ICommand 方法。在实现 MVVM 模型之前有很多东西需要学习,我建议阅读 Josh Smith 的文章并下载他的示例以开始学习它:

有一些特殊的规则和原则要学习,这个例子会经历很多。

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

我也认为稍微了解一下 WPF 如何执行绑定是明智的。您可以使用绑定进行许多特殊设置,以帮助在不同的事件和其他地方执行操作。我什至不知道所有的绑定,但我知道你学得越多,你最终在 XAML 编码中节省的时间就越多,因为你可以重用、事件触发、继承和做很多事情来使你的应用程序更多比静态创作更强大。

http://msdn.microsoft.com/en-us/library/ms752347.aspx

【讨论】:

  • “我也认为稍微了解一下 WPF 如何执行绑定是明智的。”我同意,我实际上遇到了您为“msdn wpf 命令绑定”提供的谷歌搜索链接。然而,我见过的大多数示例都使用静态对象或静态变量。我可能遗漏了一些东西,但如果您能给我提供一个不使用静态对象或变量的绑定示例的链接,我将不胜感激。
  • 当您在 MVVM 中进行绑定时,通常会发生这样的情况,其中包含一个简单标签的示例:
  • 我不太确定,但我认为,数据绑定和命令绑定的工作方式略有不同。我对命令绑定做了更多阅读,发现即使 WPF 提供的默认命令也是静态 RoutedCommand 对象。所以,我认为我正朝着正确的方向前进,但如果有人创建了一些使用 XAML 绑定到控件(特别是按钮)的自定义命令,我仍然会很高兴。感谢您的回复。
  • 您使用类似的过程进行 ICommand 绑定。您只需告诉执行方法使用 ICommand 返回。它类似于
  • 你说的第一个例子是什么?从第一个链接还是第二个链接?
猜你喜欢
  • 1970-01-01
  • 2012-02-12
  • 2011-03-18
  • 1970-01-01
  • 2010-10-13
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多