0

こんにちは、wp7のSilverlightでのデータバインディングに問題があります。基本的に、別のオブジェクトリスト内にあるリストをバインドするのに問題があります。これが私のクラスの例です。

public class Movie
    {

        public Movie()
        {
            _Venues = new ObservableCollection<Venue>();
        }

        private String _Title;

        public String Title
        {
            get { return _Title; }
            set { _Title = value; }
        }
        private String _Director;

        public String Director
        {
            get { return _Director; }
            set { _Director = value; }
        }
        private String _Runtime;

        public String Runtime
        {
            get { return _Runtime; }
            set { _Runtime = value; }
        }

        private ObservableCollection<Venue> _Venues;

        public ObservableCollection<Venue> Venues
        {
            get { return _Venues; }
            set { _Venues = value; }
        }

public class Venue
    {
        private String _Date;

        public String Date
        {
            get { return _Date; }
            set { _Date = value; }
        }
        private String _Time;

        public String Time
        {
            get { return _Time; }
            set { _Time = value; }
        }
    }
}

私の意図は、会場からの値をxamlに設定することです。

 <!-- The template for movie items -->
        <DataTemplate x:Key="moviesItemTemplate">
            <StackPanel Grid.Column="1"  VerticalAlignment="Top">
                <StackPanel Grid.Column="1"  VerticalAlignment="Top" Orientation="Horizontal">
                    <Image delay:LowProfileImageLoader.UriSource="{Binding ImageThumb}"/>
                    <TextBlock Text="{Binding Title}" FontSize="26"  Margin="12,-12,12,6" HorizontalAlignment="Center" VerticalAlignment="Center" />
                </StackPanel>
                <ListBox ItemsSource="{Binding Venues}">
                    <TextBlock Text="{Binding Date}" Foreground="Orange"  />
                </ListBox>
            </StackPanel>
        </DataTemplate>

 <!--ContentPanel contains details text. Place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <toolkit:LongListSelector x:Name="moviesListGropus" Background="Transparent" 
                 ItemTemplate="{StaticResource moviesItemTemplate}"
                 GroupHeaderTemplate="{StaticResource groupHeaderTemplate}"
                 GroupItemTemplate="{StaticResource groupItemTemplate}" >   
                <toolkit:LongListSelector.GroupItemsPanel>
                    <ItemsPanelTemplate>
                        <toolkit:WrapPanel/>
                    </ItemsPanelTemplate>
                </toolkit:LongListSelector.GroupItemsPanel>
            </toolkit:LongListSelector>
        </Grid>
    </Grid>

csコードでは、Linq式の代わりに手動ループを使用してmovieGroupsを取得しましたが、ここでは問題にならないはずです。

ObservableCollection<Group<Movie>> movieGroups = new ObservableCollection<Group<Movie>>();
this.moviesListGropus.ItemsSource = movieGroups;

public class Group<T> : IEnumerable<T>
        {
            public Group(string name, IEnumerable<T> items)
            {
                this.Title = name;
                this.Items = new List<T>(items);
            }

            public override bool Equals(object obj)
            {
                Group<T> that = obj as Group<T>;

                return (that != null) && (this.Title.Equals(that.Title));
            }

            public string Title
            {
                get;
                set;
            }

            public IList<T> Items
            {
                get;
                set;
            }

            #region IEnumerable<T> Members

            public IEnumerator<T> GetEnumerator()
            {
                return this.Items.GetEnumerator();
            }

            #endregion

            #region IEnumerable Members

            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return this.Items.GetEnumerator();
            }

            #endregion
        }

残念ながら、スタックオーバーフローの制限のために画像を提供できませんが、結果はhttp://postimage.org/image/as49vtqvn/で確認できます。

2番目の部分の編集:アイデアは、会場のリストから目的の時間を表示する役割を担う別のtextBlockをテンプレート内に配置することです。そのためには、会場がリストであり、そのリストから特定のオブジェクトが必要なため、1レベル深くする必要があります。助言がありますか?

 <DataTemplate x:Key="moviesItemTemplate">
            <StackPanel Grid.Column="1"  VerticalAlignment="Top">
                <StackPanel Grid.Column="1"  VerticalAlignment="Top" Orientation="Horizontal">
                    <Image delay:LowProfileImageLoader.UriSource="{Binding ImageThumb}"/>
                    <TextBlock Text="{Binding Title}" FontSize="26"  Margin="12,-12,12,6" HorizontalAlignment="Center" VerticalAlignment="Center" />
                </StackPanel>
                <ItemsControl x:Name="venueTime" ItemsSource="{Binding Path= Venue}">
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Time}" Foreground="Orange" />
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </StackPanel>
        </DataTemplate>
4

1 に答える 1