【问题标题】:MVVM Light: Bind event to command in code behindMVVM Light:将事件绑定到代码中的命令
【发布时间】:2010-07-30 06:33:58
【问题描述】:

我正在使用 MVVM light 将视图中 UIElements 上的事件绑定到视图模型中的 ICommands,并且效果很好。

但是 - 我有一种情况,我必须动态创建一些控件,我在视图后面的代码中执行此操作,因为这似乎是执行此操作的最佳位置,而且毕竟是 UI 代码.当我在代码中生成这些控件时,我还需要在代码中创建事件绑定,尽管尝试了几次,我都没有达到预期的结果。

有人这样做过吗?或者有人知道怎么做吗?

任何帮助表示赞赏!


感谢您的回答和 cmets。 Matt 是对的——问题是关于如何在代码中使用 EventToCommand 而不是 XAMl。 Matt - 我确实需要在运行时生成控件,因为直到那时我才知道控件将是什么。控件位于功能区上,并且功能区是上下文相关的,即每当主视图发生更改时,功能区上的控件都会随之更改并需要生成。

我找到了使用附加属性的解决方案,但我仍然想知道如何(以及是否)可以使用 MVVM Light 完成此操作。

【问题讨论】:

  • 这并不能回答您的问题,但是您确定需要在运行时生成控件吗?是否可以通过数据模板以及可能的触发器或模板选择器来完成同样的事情?

标签: wpf mvvm binding mvvm-light


【解决方案1】:

我不知道 MVVM Light,但假设您的视图模型设置为您的视图的 DataContext,至少有以下两个选项。

  1. 如果您知道附加到视图的视图模型的类型,则可以直接访问视图模型的命令,无需使用绑定,因为您可以直接设置Command 属性:

    var buttonA = new Button();
    buttonA.Content = "Click me";
    buttonA.Command = (DataContext as TheViewModel).TheCommand;
    
  2. 如果您不知道视图模型的类型,您可以通过以下方式创建绑定:

    var buttonB = new Button();
    buttonB.Content = "Click me too";
    var binding = new Binding("TheCommand");
    binding.Source = DataContext;
    buttonB.SetBinding(Button.CommandProperty, binding);
    

【讨论】:

  • 我相信问题更多是关于如何通过代码而不是 XAML 添加包含在 MVVM Light Toolkit 中的 EventToCommand 附加属性。
  • 我认为你是对的。我想我的答案没有多大用处:-|
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 2014-10-21
  • 2010-12-21
  • 2012-06-17
相关资源
最近更新 更多