powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как заставить DataPager работать!?
2 сообщений из 2, страница 1 из 1
Как заставить DataPager работать!?
    #37297333
Spirale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Уже долгое время бьюсь над следующей проблемой..

Есть класс ImageCollection который помещает в свою коллекцию картинки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
namespace Images.MyColl
{
    // To significantly reduce the sample data footprint in your production application, you can set
    // the DISABLE_IMAGES conditional compilation constant and disable sample data at runtime.
#if DISABLE_IMAGES
	internal class ImageCollection { }
#else

    public class ImageCollection : System.ComponentModel.INotifyPropertyChanged
    {
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }

        public ImageCollection()
        {
            try
            {
                System.Uri resourceUri = new System.Uri("/Silva;component/Images/ImageCollection/ImageCollection.xaml", System.UriKind.Relative);
                if (System.Windows.Application.GetResourceStream(resourceUri) != null)
                {
                    System.Windows.Application.LoadComponent(this, resourceUri);
                }
            }
            catch (System.Exception)
            { }
        }

        private ItemCollection _Collection = new ItemCollection();
        public ItemCollection Collection
        {
            get
            {
                return this._Collection;
            }
        }
    }

    public class ItemCollection : System.Collections.ObjectModel.ObservableCollection<Item>
    { }

    public class Item : System.ComponentModel.INotifyPropertyChanged
    {
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }

        private System.Windows.Media.ImageSource _image = null;
        public System.Windows.Media.ImageSource image
        {
            get
            {
                return this._image;
            }
            set
            {
                if (this._image != value)
                {
                    this._image = value;
                    this.OnPropertyChanged("image");
                }
            }
        }
    }
#endif
}

Когда приложение собирается, он выступает в роли ресурса с ключом ImageCollect, как видно ниже:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<Application x:Class="Silva.App"
	    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	    xmlns:Images="clr-namespace:Images.MyColl"
	    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
	    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	    mc:Ignorable="d">

    <Application.Resources>
        <ResourceDictionary>
            <Images:ImageCollection x:Key="ImageCollect" d:IsDataSource="True"/>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Assets/Styles.xaml"/>
                <ResourceDictionary Source="Assets/Templates.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Всё это барахло :) у меня отлично работает в ListBox на MainPage.xaml (картинки меняются по нажатию клавиш вверх-вниз), щас покажу как там всё забиндено:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<UserControl
    x:Class="Silva.MainPage"
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
    xmlns:uriMapper="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation"
    xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.Input"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="1024" d:DesignHeight="768">

<Grid x:Name="LayoutRoot" Style="{StaticResource LayoutRootGridStyle}">

<!-- Header -->
...........

<!-- Body -->
        <Grid x:Name="ContentGrid" Style="{StaticResource LayoutRootGridStyle}" DataContext="{Binding Source={StaticResource ImageCollect}}" Margin="0,80">

            <sdk:DataPager x:Name="ImageCollectionDataPager" Template="{StaticResource DataPagerTemplate}"
                           Style="{StaticResource DataPagerStyle}" d:LayoutOverrides="Width" Margin="0,200,0,0"/>
            <ListBox x:Name="ImageCollectionListBox" Height="200" VerticalAlignment="Top" BorderThickness="0" Background="{StaticResource TransparentWhiteBrushKey}"
                     ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" Padding="0"
                     ItemsSource="{Binding Collection}" ItemContainerStyle="{StaticResource ListBoxItemStyle}"/>
        </Grid>

<!-- Footer-->
...........

    </Grid>

</UserControl>

Как видно там есть ImageCollectionDataPager, который я хочу прикрутить "за место" кнопочек клавиатуры.
Если обратиться к msdn http://msdn.microsoft.com/ru-ru/library/system.windows.controls.datapager(v=VS.95).aspx
то там сказано, назначить ItemsSource свойство элемента управления(в данном случае это ListBox) и свойство DataPager..::..Source одной и той же коллекции данных. Также необходимо чтобы эта коллекция обеспечивала функциональные возможности разбиения по страницам. Я хотел в коде MainPage.xaml.cs получить коллекцию из ресурсов и обернуть её в класс PagedCollectionView, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
using System;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Navigation;

namespace Silva
{
    using Silva.Views;
    using Images.MyColl;

    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            ImageCollection tx = App.Current.Resources[ImageCollect];
            PagedCollectionView ty = new PagedCollectionView(tx.Collection);
            ImageCollectionDataPager.Source = ty;
        }
    }
}
Но не могу получить ресурс, может кто-то предложит другую организацию получения этого дела, для достижения результата.
Может кто-то предложит немного изменить класс ImageCollection, чтобы уже в нем отнаследоваться от интерфейса IPagedCollectionView или же просто поместить полем PagedCollectionView. Как будет лучше?
...
Рейтинг: 0 / 0
Как заставить DataPager работать!?
    #37298533
Spirale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалось все реализовать как задумано. Некоторые нюансы:
Получить ресурс ImageCollect в функции public MainPage() никак нельзя, его просто не существует на тот момент, обошел так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
using System;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Navigation;

namespace Silva
{
    using Silva.Views;
    using Images.MyColl;
    using System.Windows.Data;

    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            Loaded += new RoutedEventHandler(MainPage_Loaded);
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            var col = Application.Current.Resources["ImageCollect"];
            
            PagedCollectionView mycol = new PagedCollectionView(((ImageCollection)col).Collection);
            ImageCollectionListBox.ItemsSource = mycol;
            ImageCollectionDataPager.Source = mycol;
        }
        //.........
    }

}
Далее поступаем как в статье на msdn, при этом необходимо убрать из xaml файла binding на ItemsSource у ImageCollectionListBox, как было реализовано ранее.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как заставить DataPager работать!?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]