Привязка Artist из коллекции ArtistCollection к PanoramaItem.Listbox в Windows Phone 7 - PullRequest
1 голос
/ 04 августа 2011

Как связать всех художников из коллекции Artists с ListBox в PanoramaItem?
Мой xaml выглядит следующим образом:

<controls:PanoramaItem Header="Artist" Name="Pan3">
    <!--Double line list with image placeholder and text wrapping-->
    <ListBox Name="artistLb" Margin="0,0,-12,0" ItemsSource="{Binding Items}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
                    <!--Replace rectangle with image-->
                    <Rectangle Height="100" Width="100" Fill="#FFE5001b" Margin="12,0,9,0"/>
                    <StackPanel Width="311">
                        <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                        <TextBlock Text="{Binding LineTwo}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</controls:PanoramaItem>

и код xaml.cs:

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    MediaLibrary library = new MediaLibrary();
    int CountArtist = library.Artists.Count;

    //binding the library.Artist to the Panorama item
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 04 августа 2011

В моем ответе я предполагаю, что вы начали с Windows Phone Panorama Project и уже добавили ссылку на Microsoft.Xna.Framework, чтобы получить доступ к библиотеке мультимедиа.

При связывании объекта Ui, такого как ListBox, с кодом, стоящим за лучшим решением, следует придерживаться подхода ViewModel, который уже предусмотрен в проекте. В вашем проекте вы должны найти MainViewModel. К этой модели представления добавьте следующее свойство:

    private MediaLibrary _library;
    public MediaLibrary Library
    {
        get
        {
            if (_library == null)
            {
                _library = new MediaLibrary();
            }
            return _library;
        }
    }

Это свойство предоставляет MediaLibrary вашему xaml. Библиотека создается при первом вызове.

Из вашего xaml теперь можно привязать это свойство, я только показываю ListBox.

            <ListBox Margin="0,0,-12,0" ItemsSource="{Binding Library.Artists}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Margin="0,0,0,17" Width="432" Height="78">
                            <TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>

                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

Обратите внимание, что я связываю ListBox с подпрофилами Artists свойства Library, который мы только что создали в viewmodel. Я отредактировал шаблон ItemTemplate, чтобы показать только один текстовый блок, который привязан к имени исполнителя.

В вашем эмуляторе вы просто увидите 1 художника в качестве примера, чтобы протестировать это решение на реальном устройстве, вам нужно будет использовать инструмент WPConnect, который объясняется здесь

Надеюсь, это пока что поможет вам, пожалуйста, дайте мне знать, если остались какие-либо вопросы.

0 голосов
/ 04 августа 2011

Вы пробовали?

artistLb.DataContext = library.Artists;
...