0

私は非常に単純な問題だと思いますが、何らかの理由で答えが私を逃れています。Silverlight で単純なマスター/詳細 DataGrid を作成しています。Web 上のほとんどのサンプルは、ある種の Collection を持つオブジェクトを作成し、詳細グリッドをコレクションにバインドすることによってこれを表示します。私の場合、マスターとして機能する行と同じオブジェクトに詳細グリッドをバインドしたいだけです。サンプル コードが単純であることはわかっていますが、できるだけ単純なデモを作成して再作成しようとしています。そうは言っても、私がこのデータを持っているとしましょう:

public class Customer
{
    public int CustomerId { get; set; }
    public string CustomerName { get; set; }
    public string FavoriteColor { get; set; }
}

public class CustomerCollection : ObservableCollection<Customer>
{
    public CustomerCollection()
    {
        Add(new Customer() { CustomerId = 101, CustomerName = "Todd", FavoriteColor = "Red" });
        Add(new Customer() { CustomerId = 102, CustomerName = "Melissa", FavoriteColor = "White" });
        Add(new Customer() { CustomerId = 102, CustomerName = "Alicia", FavoriteColor = "Blue" });
        Add(new Customer() { CustomerId = 104, CustomerName = "Matthew", FavoriteColor = "Yellow" });
    }
}

わかった。めちゃくちゃシンプル。次に、このコレクションをデータグリッドにバインドします。各行には、CustomerId と CustomerName が表示されます。行をクリックすると、詳細データグリッドに好きな色を表示したいと思います。

質問は...詳細グリッドをバインドしてお気に入りの色を表示するにはどうすればよいですか? つまり、データ ソースとして親行にバインドするにはどうすればよいでしょうか。

<UserControl x:Class="Sample.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="419" d:DesignWidth="742" 
             xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
            xmlns:src="clr-namespace:Sample">

    <UserControl.Resources>
        <src:CustomerCollection x:Key="CustDs"></src:CustomerCollection>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource CustDs}}">
        <Grid.RowDefinitions>
            <RowDefinition Height="56*" />
            <RowDefinition Height="363*" />
        </Grid.RowDefinitions>
        <TextBlock Name="TextBlock1" Text="Customer Information" FontSize="28" TextAlignment="Center" />
        <sdk:DataGrid AutoGenerateColumns="False" Grid.Row="1"
                      Height="301" HorizontalAlignment="Left" Margin="30,22,0,0"
                      Name="DgCust" VerticalAlignment="Top" Width="681" ItemsSource="{Binding}"
                       HeadersVisibility="All" ColumnWidth="*">
            <sdk:DataGrid.Columns>
                <sdk:DataGridTextColumn Header="Customer Id" Binding="{Binding CustomerId}"></sdk:DataGridTextColumn>
                <sdk:DataGridTextColumn Header="Customer Name" Binding="{Binding CustomerName}"></sdk:DataGridTextColumn>
            </sdk:DataGrid.Columns>
            <sdk:DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <sdk:DataGrid Height="200" Width="600" AutoGenerateColumns="False" ColumnWidth="*" 
                                  ItemsSource="{Binding}">
                        <sdk:DataGrid.Columns>
                            <sdk:DataGridTextColumn Header="Favorite Color" Binding="{Binding}"></sdk:DataGridTextColumn>
                        </sdk:DataGrid.Columns>
                    </sdk:DataGrid>
                </DataTemplate>
            </sdk:DataGrid.RowDetailsTemplate>
        </sdk:DataGrid>
    </Grid>
</UserControl>
4

1 に答える 1

2

データはマスター/詳細シナリオを表していません。詳細領域にお気に入りの色を表示するだけの場合は、DataTemplate セクションで次のようにします。

            <sdk:DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding FavoriteColor}" />
            </DataTemplate>
        </sdk:DataGrid.RowDetailsTemplate>

実際にマスター/詳細が必要な場合は、代わりにこれを試してください。

    public class Customer
{
    public int CustomerId { get; set; }
    public string CustomerName { get; set; }
    public string FavoriteColor { get; set; }
    public List<FavoriteShow> Shows { get; set; }
}

public class FavoriteShow
{
    public string Name {get;set;}
    public int Stars {get;set;}
}

public class CustomerCollection : ObservableCollection<Customer>
{
    public CustomerCollection()
    {
        List<FavoriteShow> showList1 = new List<FavoriteShow>();
        showList1.Add(new FavoriteShow { Name="Bugs Bunny", Stars = 4});
        showList1.Add(new FavoriteShow { Name="Superman", Stars=2});
        showList1.Add(new FavoriteShow { Name="A-Team", Stars=3});

        List<FavoriteShow> showList2 = new List<FavoriteShow>();
        showList2.Add(new FavoriteShow { Name = "Dallas", Stars = 1 });
        showList2.Add(new FavoriteShow { Name = "Loony Tunes", Stars = 3 });

        Add(new Customer() { CustomerId = 101, CustomerName = "Todd", FavoriteColor = "Red", Shows = showList1 });
        Add(new Customer() { CustomerId = 102, CustomerName = "Melissa", FavoriteColor = "White" });
        Add(new Customer() { CustomerId = 102, CustomerName = "Alicia", FavoriteColor = "Blue", Shows = showList2 });
        Add(new Customer() { CustomerId = 104, CustomerName = "Matthew", FavoriteColor = "Yellow" });
    }
}

そしてXAML:

<UserControl x:Class="Sample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
         d:DesignHeight="419"
         d:DesignWidth="742"
         xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
         xmlns:src="clr-namespace:Sample">

<UserControl.Resources>
    <src:CustomerCollection x:Key="CustDs"></src:CustomerCollection>
</UserControl.Resources>

<Grid x:Name="LayoutRoot"
      Background="White"
      DataContext="{Binding Source={StaticResource CustDs}}">
    <Grid.RowDefinitions>
        <RowDefinition Height="56*" />
        <RowDefinition Height="363*" />
    </Grid.RowDefinitions>
    <TextBlock Name="TextBlock1"
               Text="Customer Information"
               FontSize="28"
               TextAlignment="Center" />
    <sdk:DataGrid AutoGenerateColumns="False"
                  Grid.Row="1"
                  Height="301"
                  HorizontalAlignment="Left"
                  Margin="30,22,0,0"
                  Name="DgCust"
                  VerticalAlignment="Top"
                  Width="681"
                  ItemsSource="{Binding}"
                  HeadersVisibility="All"
                  ColumnWidth="*">
        <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn Header="Customer Id"
                                    Binding="{Binding CustomerId}"></sdk:DataGridTextColumn>
            <sdk:DataGridTextColumn Header="Customer Name"
                                    Binding="{Binding CustomerName}"></sdk:DataGridTextColumn>
        </sdk:DataGrid.Columns>
        <sdk:DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding FavoriteColor}" />
                    <sdk:DataGrid ItemsSource="{Binding Shows}" />
                </StackPanel>
            </DataTemplate>
        </sdk:DataGrid.RowDetailsTemplate>
    </sdk:DataGrid>
</Grid>

于 2013-05-16T04:22:27.340 に答える