2

私は Wpf に苦労していますDataGrid。それItemsSourceDataTableタイプセルで構成されている場所ですTuple<int, string>

を作成する方法についての小さなスニペット コードを次に示しますDataTable

            // Create columns
            for (int j = 0; j < maxCount; j++) {
                dt.Columns.Add(selectedTests[i].Name + " " + (j + 1).ToString(), typeof(Tuple<int, string>));
            }

            // Create rows 
            for (int k = 0; k < tuple.Item2.Count; k++) {
                var newRow = dt.NewRow();
                dt.Rows.Add(newRow);
            }

            ...
            dt.Rows[k][i + m] = new Tuple<int, string>(n, str);

次に、これDataTableを myに設定し、タプルDataGridのプロパティのみを表示したいのでItem2、この時点でタプル インスタンスを保持する必要があります。は自動生成されるため、設定する列を定義できませんdisplaymemberPath

    <DataGrid  x:Name="dataGrid" LoadingRow="dataGrid_LoadingRow_1" ItemsSource="{Binding DataTable}" DisplayMemberPath="{Binding Item2}">

私のデータグリッドは常に、私のタプルを次のような文字列に変換します:

ここに画像の説明を入力

4

2 に答える 2

0

この質問にあるように、分離コードでバインディングを設定できます。

したがって、yourgrid_AutoGeneratingColumnイベントをサブスクライブしてこれを行うことができます。

(e.Column as DataGridTextColumn).Binding = new Binding("Title");

確かに、いくつかのソリューションでイベントにColumnName渡す必要があります...AutoGeneratingColumn

于 2016-07-24T05:18:14.923 に答える
-1

列を手動で設定し、Item2 列にバインドするだけです。

<DataGrid ItemsSource="{Binding DataTablePropertyInYourDataContext}">
<DataGrid.Columns>
<DataGridTextColumn 
            Header="Item2" 
            Binding="{Binding ColumnNameInYourDataTable}" 
            />
</DataGrid.Columns>
</DataGrid>

または別の回避策: AutoGeneratingColumn イベントをサブスクライブし、[列が望ましくない場合にキャンセル] を true に設定します。MSDNでこれを見てください

それが役立つことを願っています

于 2013-01-21T06:50:54.217 に答える