我正在使用MVVM灯将视图中的UIElements上的事件绑定到我的视图模型中的ICommands,这非常有效。
然而 - 我有一种情况,我必须动态创建一些控件,我在视图后面的代码中这样做,因为这似乎是最好的地方,它毕竟是UI代码。当我在代码中生成这些控件时,我还需要在代码中创建事件绑定,尽管经过多次尝试,但我还没有实现所需的结果。
有人这样做过,还是有人知道怎么做?
任何帮助表示赞赏!
感谢您的回答和评论。 Matt是对的 - 问题是关于如何在代码中使用EventToCommand而不是XAMl。 Matt - 我确实需要在运行时生成控件,因为直到那时我才知道控件是什么。控件位于功能区上,功能区是上下文相关的,即每当主视图发生更改时,功能区上的控件都会随之更改并需要生成。
我找到了一个使用附加属性的解决方案,但我仍然想知道如何(以及是否)可以使用MVVM Light完成此操作。
答案 0 :(得分:0)
我不知道MVVM Light,但假设您的viewmodel设置为视图的DataContext
,则至少有以下两个选项。
如果您知道附加到视图的视图模型的类型,则可以直接访问viewmodel的命令,并且不需要使用绑定,因为您可以直接设置Command
属性:< / p>
var buttonA = new Button();
buttonA.Content = "Click me";
buttonA.Command = (DataContext as TheViewModel).TheCommand;
如果您不知道viewmodel的类型,可以通过以下方式创建绑定:
var buttonB = new Button();
buttonB.Content = "Click me too";
var binding = new Binding("TheCommand");
binding.Source = DataContext;
buttonB.SetBinding(Button.CommandProperty, binding);