当ItemsSource的计数为THREE时,LongListMultiSelector不刷新第二个元素的视图

时间:2014-02-15 12:00:07

标签: windows-phone-8 binding converter longlistselector

最近我在WPToolkit中使用LongListMultiSelector(LLMS),现在面临一个非常奇怪的错误。也就是说,当LLMS的ItemsSource恰好有3个项目时。然后第二个视图不会刷新,而其他两个视图。当计数不是3时,LLMS就可以了。我写了一个小应用程序来测试这种情况。在此测试中,LLMS绑定到ObservableCollection<ItemViewModel>。以下是ItemViewModel的代码:

public class ItemViewModel : INotifyPropertyChanged
{
    public ItemViewModel()
    {
        time = DateTime.Now;
    }

    private DateTime _time;
    /// <summary>
    /// Property for test use
    /// </summary>
    public DateTime time
    {
        get { return _time; }
        set
        {
            if (_time != value)
            {
                _time = value;
                RaisePropertyChanged("time");
            }
        }
    }

    #region INPC Impl
    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string pName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(pName));
    }
    #endregion
}

我的LLMS设置如下:

    <phone:PhoneApplicationPage.Resources>
        <local:ItemToStrConverter x:Key="cvt"></local:ItemToStrConverter>
    </phone:PhoneApplicationPage.Resources>
    ......
    <toolkit:LongListMultiSelector Height="300" Name="llms">
         <toolkit:LongListMultiSelector.ItemTemplate>
             <DataTemplate>
                <TextBlock Text="{Binding Converter={StaticResource cvt}}"
                            Style="{StaticResource PhoneTextLargeStyle}"></TextBlock>
             </DataTemplate>
         </toolkit:LongListMultiSelector.ItemTemplate>
     </toolkit:LongListMultiSelector>

ItemToStrConverter可以将ItemViewModel的实例转换为字符串(time.ToString())。

请注意TextTextBlock的{​​{1}}不对DataTemplate具有约束力。相反,它直接绑定到time实例。

所以,假设LLMS在ItemViewModel上,我转到其他一些页面来修改MainPage实例的ItemViewModel并返回time,这个将导致加载LLMS并新建一个或多个MainPage进行转换。如果我有多于或少于3个项目,一切都很好,所有实例都将正确转换。但是,当我有3个项目时,第二个项目不会被转换。我在ItemToStrConverter方法中创建了一个断点,并且发生了错误,因为此方法仅被调用两次(到第一个和第三个实例)。似乎LLMS只是忽略了第二个实例。

以前有人遇到过这个问题吗?

0 个答案:

没有答案