MVVM Light:将事件绑定到后面的代码中

时间:2010-07-30 06:33:59

标签: wpf mvvm binding mvvm-light

我正在使用MVVM灯将视图中的UIElements上的事件绑定到我的视图模型中的ICommands,这非常有效。

然而 - 我有一种情况,我必须动态创建一些控件,我在视图后面的代码中这样做,因为这似乎是最好的地方,它毕竟是UI代码。当我在代码中生成这些控件时,我还需要在代码中创建事件绑定,尽管经过多次尝试,但我还没有实现所需的结果。

有人这样做过,还是有人知道怎么做?

任何帮助表示赞赏!


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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 如果您知道附加到视图的视图模型的类型,则可以直接访问viewmodel的命令,并且不需要使用绑定,因为您可以直接设置Command属性:< / p>

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

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