0

我有DataGrid一个ObservableCollection. 我动态添加cols。Cols struc 是第一个 col 是 TextBlock 其余都是按钮。我对按钮有某些问题:

我想为该 col 设置命令,调用带有 2 个参数(字符串、字符串)的函数“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 不起作用。

4

1 回答 1

1

您添加的按钮从 DataGrid 中的当前行共享 DataContext,因此当您调用“MyCommand”时,WPF 会搜索 TOR_List 中的对象,并且由于它可能不存在,因此不会执行。您可以检查输出窗口以检查绑定错误。

要实现您想要的,您必须在 TOR_List 为其列表的对象中创建命令,或使用 RelativeSource。

于 2012-05-25T12:51:30.317 回答