0

私はにDataGridバインドされていObservableCollectionます。colsを動的に追加します。Cols strucは1番目のcolはTextBlockで、残りはすべてButtonsです。ボタンに特定の問題があります:

その列にコマンドを設定し、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 に答える