0
加載數據我們有一個ItemsControl設置這樣使用WPF ItemsControl的虛擬化只爲可見項
<ScrollViewer>
<ItemsControl ItemsSource="{Binding Items}" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Data}"></TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
與MainViewModel之中:
public class MainViewModel : ViewModelBase
{
public ObservableCollection<AutoUpdatingItem> Items
{
get;
set;
}
public MainViewModel()
{
Items = new ObservableCollection<AutoUpdatingItem>();
for (int i = 0; i < 1000; i++)
{
Items.Add(new AutoUpdatingItem(i));
}
}
}
和行的視圖模型
public class AutoUpdatingItem : ViewModelBase
{
private readonly DispatcherTimer timer;
private int data;
public int Data
{
get { return data; }
set { Set(ref data, value); }
}
public AutoUpdatingItem(int i)
{
Data = i;
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(20);
timer.Start();
timer.Tick += Timer_Tick;
}
private void Timer_Tick(object sender, EventArgs e)
{
// Data would be fetched from WebService here
Data++;
}
}
我們如何才能實現只有可見物品被更新?當虛擬化面板中的某個項目正在回收時,是否有任何方法可以收到通知?
我綁定 'IsVisibly' 屬性,並基於該啓動/停止計時器時,有必要。 –