[Silverlight入门系列]如何自动隐藏分页控件DataPager
时间:2011-06-01 来源:Mainz
前面说到了如何用Silverlight默认的分页控件DataPager实现服务器端分页,而不是客户端分页。DataPager一般搭配DataGrid或其它列表控件使用。常常有这样的需求:当内容只有一页或者不满一页的时候,就自动隐藏不显示分页栏。如何在Silverlight中实现呢?前面已经说到了在Silverlight4中Trigger实现的很不完美,不像WPF和Flex中简洁,现在就只能罗嗦的实现自动隐藏DataPager的功能了。
不用Trigger就绑定DataPager的Visibility属性
在Xaml中,给DataPager绑定Visibility属性:
Visibility="{Binding PagerNeeded, Mode=OneWay, Converter={StaticResource BoolToVisibConverter},ConverterParameter=Inverse}
添加IConverter : BoolToVisibilityConverter
写一个ValueConver把bool类型的值(是否只有一页)转换为Visibility格式:
public class BoolToVisibilityConverter : IValueConverter
{
#region "IValueConverter Members"
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (parameter == null)
{
return ((bool)value == true) ? Visibility.Collapsed : Visibility.Visible;
}
else if (parameter.ToString() == "Inverse")
{
return ((bool)value == true) ? Visibility.Visible : Visibility.Collapsed;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
注意在Xaml里面要添加Converter的命名空间:
xmlns:converters="clr-namespace:a.b;assembly=a.b"
绑定ViewModel的PagerNeeded属性
我们用MVVM模式,所以在View绑定的ViewModel里面要添加一个PagerNeeded属性,用来绑定到DataPager的Visibility属性:
private bool _PagerNeeded = false;
public bool PagerNeeded
{
get
{
return _PagerNeeded;
}
set
{
if (_PagerNeeded == value) return;
_PagerNeeded = value;
RaisePropertyChanged("PagerNeeded");
}
}
然后在ViewModel中更新DataPager的Context的时候加一行更新PagerNeeded属性就会自动更新界面的Visibility属性了:
PagerNeeded = (_PagerContext != null && _PagerContext.TotalItemCount > 0);
总结
这样,我们就实现了当数据只有一页的时候自动隐藏分页控件DataPager,当数据量超过一页自动显示。够繁琐的,这也正是Silverlight和WPF/Flex复杂的地方,本来就是一个Trigger搞定的事情弄这么复杂。希望Silverlight5能够改进。
相关阅读 更多 +