0

DataGridSelectedに行がある場合は、詳細ビューを作成する必要があります。

データグリッドのヘッダーを取得して詳細ビュー グリッドに割り当てるにはどうすればよいですかLabel。ラベルの近くのテキストブロックには、選択した行のヘッダーの値が含まれている必要があります。

私のデータグリッドのヘッダーは静的ではありません。実行時に変更される可能性があります。データグリッドの itemsource を Ienumerable コレクションにバインドしました。

私の問題に対処できれば、事前に感謝します。

アップデート:

  <my:DataGrid 
                              Grid.Row="0"
                              x:Name="dataGrid1" 
                              Width="auto" 
                              AutoGenerateColumns="True" CanUserAddRows="True"             Margin="0,0,0,0"
                              MouseRightButtonUp="dataGrid1_MouseRightButtonUp" />

私のコードビハインドでは、Ienumerable コレクションをバインドしています。

    this.dataGrid1.ItemsSource = objref.Result;
//Where objref.Result is Ienumerable collection

次に、XAML の詳細ビューで、

                           <Label>Date:</Label>
                            <TextBlockName="data"
                       Text="{Binding SelectedItem.date,  ElementName=dataGrid1}" />
                            <Label>Username:</Label>
                            <TextBlock Name="username" 
                       Text="{Binding SelectedItem.username, ElementName=dataGrid1}"
                      />

列ヘッダーをハードコーディングするだけです。変更になる場合があります。どうすればこれを処理できますか??

4

1 に答える 1

0

正しいヘッダーを生成するすべてのフィールドの一覧表示は、グリッドによって既に行われています。詳細ビューは、1 行に収まらない画像やその他のものを表示するためによく使用されます。

とにかく、objref からの結果の型がわからないものと仮定します。したがって、次の目的でリフレクションを使用する必要があります。

  1. プロパティ名とプロパティ値を表すオブジェクトを作成します。
  2. selecteditem が変更されたときにパブリック プロパティを取得します。
  3. このパブリック プロパティ リストを新しいクラスのリストに変換します
  4. データ テンプレートを使用して、これを詳細ビューとして表示します。

表示する情報を表すクラス:

public class PropertyInformation
{
    public string Name { get; set; }

    public object Value { get; set; }
}

プロパティ リストを取得するためのコンバーター:

public class PropertiesLister :IValueConverter
{
    private const BindingFlags Flags = BindingFlags.Instance | BindingFlags.Public;

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value.GetType()
            .GetProperties(Flags)
            .Select(pi => new PropertyInformation
            {
                Name = pi.Name,
                Value = pi.GetValue(value, null)
            });
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML のプロパティ情報とコンバーターのテンプレート:

<Window.Resources>
    <DataTemplate x:Key="UserDataTemplate">
        <StackPanel Orientation="Horizontal">
            <Label Content="{Binding Name}"/>
            <Label Content="{Binding Value}" />
        </StackPanel>
    </DataTemplate>

    <Test_DataGridDetailedView:PropertiesListerConverter x:Key="toListConverter" />

</Window.Resources>

コンバーターを使用した詳細ビュー:

<DataGrid ItemsSource="{Binding Customers}"
          AutoGenerateColumns="True">
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <ItemsControl
                x:Name="UserList"
                ItemTemplate="{StaticResource UserDataTemplate}"
                ItemsSource="{Binding Converter={StaticResource toListConverter}}"
                />
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>
于 2013-01-22T13:14:19.157 に答える