Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf MVVM指示灯:将事件绑定到代码隐藏中的命令_Wpf_Mvvm_Binding_Mvvm Light - Fatal编程技术网

Wpf MVVM指示灯:将事件绑定到代码隐藏中的命令

Wpf MVVM指示灯:将事件绑定到代码隐藏中的命令,wpf,mvvm,binding,mvvm-light,Wpf,Mvvm,Binding,Mvvm Light,我正在使用MVVM light将视图中UIElements上的事件绑定到视图模型中的ICommands,这非常有效 然而,我有一种情况,我必须在运行中创建一些控件,我在视图的代码隐藏中这样做,因为这似乎是最好的地方,毕竟是UI代码。当我在代码中生成这些控件时,我还需要在代码中创建事件绑定,尽管进行了几次尝试,但没有达到预期的结果 有人这样做过吗,或者有人知道怎么做吗 感谢您的帮助 谢谢你的回答和评论。Matt是对的——问题是如何在代码中使用EventToCommand而不是XAMl。马特-我确

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

然而,我有一种情况,我必须在运行中创建一些控件,我在视图的代码隐藏中这样做,因为这似乎是最好的地方,毕竟是UI代码。当我在代码中生成这些控件时,我还需要在代码中创建事件绑定,尽管进行了几次尝试,但没有达到预期的结果

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

感谢您的帮助


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


我已经找到了一个使用附加属性的解决方案,但我仍然想知道如何(以及是否)使用MVVM Light来实现这一点。

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

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

    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);
    

  • 我认为问题更多的是如何通过代码而不是XAML来添加MVVM Light Toolkit中包含的EventToCommand附加属性。我认为你是对的。我想我的答案没有多大用处:——|这没有回答您的问题,但您确定需要在运行时生成控件吗?同样的事情是否可以通过数据模板和触发器或模板选择器来完成?