RadDataBoundListBox事件未触发命令
本文关键字:命令 事件 RadDataBoundListBox | 更新日期: 2023-09-27 18:05:33
我有一个事件命令绑定与RadDataBoundListBox的Windows Phone 8的问题。
我有以下XAML:<Grid x:Name="LayoutRoot" Background="{StaticResource PivotBackground}" DataContext="{Binding RecomandationViewModel, Source={StaticResource Locator}}">
..........
<telerikPrimitives:RadDataBoundListBox x:Name="DataBoundListBox" ItemsSource="{Binding RecommendedSongs}" DisplayMemberPath="Name" EmptyContent=" " DataVirtualizationMode="OnDemandAutomatic">
<i:Interaction.Triggers>
<i:EventTrigger EventName="DataRequested">
<command:EventToCommand Command="{Binding DataRequestedCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<telerikPrimitives:RadDataBoundListBox.ItemLoadingTemplate>
<DataTemplate>
<bitrimitives:BitBusyIndicator IsRunning="True" AnimationStyle="AnimationStyle9" Foreground="{StaticResource MyColor}" Content=""/>
</DataTemplate>
</telerikPrimitives:RadDataBoundListBox.ItemLoadingTemplate>
</telerikPrimitives:RadDataBoundListBox>
</Grid>
和视图模型代码:
private RelayCommand _dataRequestedCommand;
public RelayCommand DataRequestedCommand
{
get
{
if (_dataRequestedCommand == null)
{
_dataRequestedCommand = new RelayCommand(DataRequested, () => true);
}
return _dataRequestedCommand;
}
}
private void DataRequested()
{
int i = 4;
}
datarequrequested方法永远不会被触发,但如果我订阅RadDataBoundListBox的datarequrequested事件,该方法将被触发。你能帮我解决这个问题吗?
看看这个链接。也许它能帮到你。
OnDemandAutomatic虚拟化模式是这样一种模式:当最终用户接近可滚动列表的末尾时,自动请求数据项。通过使用RadDataBoundListBox公开的ItemLoadingContent和ItemLoadingTemplate属性,可以显示专门的可视化容器,指示正在处理的数据请求。定义ItemLoadingTemplate的一种可能方法如下所示:
<telerikPrimitives:RadDataBoundListBox.ItemLoadingTemplate>
<DataTemplate>
<Grid MinHeight="14">
<Grid.Triggers>
<EventTrigger>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ellipseTranslate" RepeatBehavior="Forever">
<DoubleAnimation.EasingFunction>
<SineEase EasingMode="EaseInOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
<Ellipse VerticalAlignment="Center" HorizontalAlignment="Left" Width="6" Height="6" Grid.Column="1" Fill="{StaticResource PhoneAccentBrush}">
<Ellipse.RenderTransform>
<TranslateTransform x:Name="ellipseTranslate" X="0" />
</Ellipse.RenderTransform>
</Ellipse>
</Grid>
</DataTemplate>
</telerikPrimitives:RadDataBoundListBox.ItemLoadingTemplate>
使用OnDemandAutomatic虚拟化模式,只需将RadDataBoundListBox控件的DataVirtualizationMode属性设置为DataVirtualizationMode.OnDemandAutomatic。你还需要处理datarerequested事件,该事件将在需要加载更多数据时触发:
public MainPage()
{
InitializeComponent();
this.radDataBoundListBox.DataVirtualizationMode = DataVirtualizationMode.OnDemandAutomatic;
this.radDataBoundListBox.DataRequested += this.OnDataRequested;
}
private void OnDataRequested(object sender, EventArgs args)
{
//TODO: download data items
}