我有DataGrid
绑定到ObservableCollection
。我动态添加cols。 Cols struc是第一个col是TextBlock休息所有都是按钮。我对按钮有一些问题:
我想为该col设置Command,使用2个参数(String,String)调用函数“OpenTORWindow”。我无法弄清楚如何设置它。添加cols的代码如下:
FrameworkElementFactory buttonTemplate = null;
for (int i = 0; i < GlobalUtils.TOR_List.Count; i++)
{
buttonTemplate = new FrameworkElementFactory(typeof(Button));
switch (i) {
case 0:
buttonTemplate.SetBinding(Button.ContentProperty,
new Binding("CLVButtonText"));
break;
case 1:
buttonTemplate.SetBinding(Button.ContentProperty,
new Binding("MKBLButtonText"));
break;
}
buttonTemplate.SetBinding(Button.CommandProperty, new Binding("MyCommand"));
RoutedEventHandler handler = new RoutedEventHandler(OpenNewWindow);
buttonTemplate.AddHandler(Button.ClickEvent, handler, true);
this.seivesTorGrid.Columns.Add(new DataGridTemplateColumn()
{
Header = GlobalUtils.TOR_List[i].TOR_Id,
CellTemplate = new DataTemplate() { VisualTree = buttonTemplate }
});
}
我将MyCommand指定为:
MyCommand = new RelayCommand(param => this.OpenWindow(s.SeiveIdSize))
但MyCommand从未被触发过。然后我添加了AddHandler,这是有效的。 任何想法为什么CommandProperty不工作。
答案 0 :(得分:1)
您要添加的按钮与DataGrid中的当前行共享DataContext,因此当您调用'MyCommand'时,WPF会在TOR_List中搜索该对象,并且因为它可能不存在,所以它不会执行。 您可以检查输出窗口以检查绑定错误。
要实现您的目标,您必须在TOR_List所属的对象中创建命令,或者使用RelativeSource。