0

カスタム クラスの ObservableCollection にバインドされた DataGrid があります。コレクションは ViewModel のプロパティであり、コレクションへの変更を含め、グリッドは正常に機能します。

次のように、RowDetailsTemplate を使用して、StackPanel に 2 つの追加コレクションを表示したいと考えています。

        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel Name="GrcidSP" Orientation="Horizontal">
                    <DataGrid Name="ClusterIndexGrid" AutoGenerateColumns="True" 
                              ItemsSource="{Binding ClusterIndexColumns}"
                              CanUserAddRows="False" CanUserResizeRows="False"
                              Width="Auto"/>
                    <DataGrid Name="IndexGrid" AutoGenerateColumns="True" 
                              ItemsSource="{Binding IndexColumns}"
                              CanUserAddRows="False" CanUserResizeRows="False"
                              Width="Auto"/>
                </StackPanel>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>

内側のグリッドのバインド ソースである ClusterIndexColumns と IndexColumns も、ViewModel のコレクションです。

問題は、行の詳細を表示すると、データグリッドが空になることです。つまり、まったくロードされず、列も行もありません。

何が起こっているのかを理解するために、内側のデータグリッドをラベルに置き換えました。

        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel Name="GridSP" Orientation="Horizontal">
                    <Label Content="{Binding}" Width="Auto" Background="AliceBlue"/>
                </StackPanel>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>

バインディング ソースを指定していない - {Binding}

ラベルには、外側のグリッドのソースであるコレクションにあるカスタム クラスの名前が表示されるようになりました。

どういうわけか、内側のグリッドのデータ コンテキストとして ViewModel に戻る必要があります。

しかし、どうやって教えてください?

4

1 に答える 1

0

わかりましたので、ClusterIndexColumns および IndexColumns コレクションをプロパティとして、メイン グリッドに表示されるカスタム クラスに追加することで、これを解決しました。ここで、行をクリックすると、rowdetails 領域が開き、内側のグリッドが正常に読み込まれます。

ところで、SelectedIndex プロパティを ViewModel のプロパティにバインドすることにより、選択された行がメイン グリッドで変更されると、コレクションに値が設定されます。

Mode=OneWayToSource

これが誰かに役立つことを願っています。

于 2011-03-23T12:29:40.697 に答える