west
west

Reputation: 384

Problem SilverLight 4 DataPager control

I want to bind DataPager to DataGrid

here is xaml

<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  x:Class="NorthWindSilver.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"
xmlns:mv="clr-namespace:NorthWindSilver.ViewModel"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<UserControl.Resources>
    <mv:ViewModel x:Key="ViewModel"/>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" Background="White">
    <data:DataGrid Name="dgCustomer" AutoGenerateColumns="True" ItemsSource="{Binding Items, Mode=TwoWay, Source={StaticResource ViewModel}}">
    </data:DataGrid>
    <sdk:DataPager HorizontalContentAlignment="Center" x:Name="myPager" Grid.Row="2" Source="{Binding Path=ItemsSource, ElementName=dgCustomer}" PageSize="10"/>

</Grid>

and ViewModel

 public class ViewModel :  INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    public ObservableCollection<Customer> _items;

    public ViewModel()
    {
        if (!IsDesignTime)
            this.Customer();
    }

    public void ChangeProperty(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

    }      

    public ObservableCollection<Customer> Items
    {
        get
        {
            return this._items;
        }
        set
        {
            this._items = value;
            ChangeProperty("Items");
        }
    }


    public bool IsDesignTime
    {
        get
        {
            return (Application.Current == null) ||
                (Application.Current.GetType() == typeof(Application));
        }
    }


    public void Customer()
    {
        DataServiceClient webService = new DataServiceClient();
        webService.GetCustomersCompleted += new EventHandler<GetCustomersCompletedEventArgs>(webService_GetCustomersCompleted);

        webService.GetCustomersAsync();
    }


    void webService_GetCustomersCompleted(object sender, GetCustomersCompletedEventArgs e)
    {
        Items = e.Result;

        PagedCollectionView pageView = new PagedCollectionView(Items);          

        MainPage ma = new MainPage();

        ma.dgCustomer.ItemsSource = pageView;
    }
}

Here is the resultenter image description here

As you see DataPager does not work what the problem?

Upvotes: 0

Views: 1637

Answers (1)

thomasmartinsen
thomasmartinsen

Reputation: 1993

Try to expose your PagedCollectionView as a property on the ViewModel and bind the ItemsSource on the DataGrid and Pager to the PagedCollectionView instead.

Upvotes: 1

Related Questions