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事件,该方法将被触发。你能帮我解决这个问题吗?

RadDataBoundListBox事件未触发命令

看看这个链接。也许它能帮到你。

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
}