WPF 动态创建按钮时如何将后台本地变量作为Command参数绑定
问题解答
可以将本地变量作为命令参数传递,分两种场景处理:
- 场景1:参数创建后不需要动态更新
这种情况不需要调用SetBinding方法,直接给CommandParameter属性赋值即可,代码如下:foreach (int key in hotQ) { Button dataButton = new Button { Content = key.ToString(), Width = 128, }; dataButton.SetBinding(Button.CommandProperty, new Binding("RunDialogCommand")); dataButton.CommandParameter = key; // 直接赋值当前的key值 } - 场景2:参数需要跟随数据源动态更新
如果后续需要修改参数值并同步到命令,才需要使用绑定逻辑,先给按钮的DataContext赋值为当前key,再绑定到自身的DataContext即可:foreach (int key in hotQ) { Button dataButton = new Button { Content = key.ToString(), Width = 128, DataContext = key }; dataButton.SetBinding(Button.CommandProperty, new Binding("RunDialogCommand")); dataButton.SetBinding(Button.CommandParameterProperty, new Binding()); // 绑定到自身DataContext }
注意事项
如果你使用的是C# 5.0以下版本,需要在循环内部声明临时变量存储迭代值,避免闭包捕获问题导致所有按钮的参数都取到最后一次迭代的key值:
foreach (int key in hotQ) { int tempKey = key; // 循环内声明临时变量 Button dataButton = new Button { Content = tempKey.ToString(), Width = 128, }; dataButton.SetBinding(Button.CommandProperty, new Binding("RunDialogCommand")); dataButton.CommandParameter = tempKey; }
命令接收示例
你的RunDialogCommand执行方法可以直接接收该参数:
// 命令执行逻辑示例 private void RunDialog(object parameter) { int currentKey = (int)parameter; // 基于currentKey处理业务逻辑 }
内容的提问来源于stack exchange,提问作者Leonid
相关产品推荐
相关产品推荐

