最近我在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()
)。
请注意Text
中TextBlock
的{{1}}不对DataTemplate
具有约束力。相反,它直接绑定到time
实例。
所以,假设LLMS在ItemViewModel
上,我转到其他一些页面来修改MainPage
实例的ItemViewModel
并返回time
,这个将导致加载LLMS并新建一个或多个MainPage
进行转换。如果我有多于或少于3个项目,一切都很好,所有实例都将正确转换。但是,当我有3个项目时,第二个项目不会被转换。我在ItemToStrConverter
方法中创建了一个断点,并且发生了错误,因为此方法仅被调用两次(到第一个和第三个实例)。似乎LLMS只是忽略了第二个实例。
以前有人遇到过这个问题吗?