以下是我正在使用的列表视图(下面的代码)。每当我清除可观察到的集合绑定到项目源并将新项目添加到集合时,就会观察到轻微的闪烁。我尝试清空过渡集合,但是仅禁用了动画行为,闪烁仍然持续。
有什么想法吗?
<ListView SelectionMode="None" x:Name="View"
Grid.Row="1"
ItemsSource="{x:Bind Details,Mode=OneWay}"
ItemTemplateSelector="{StaticResource TestModuleTemplateSelector}"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ShowsScrollingPlaceholders="False"
ScrollViewer.HorizontalScrollMode="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto">
<ListView.ItemContainerTransitions>
<TransitionCollection/>
</ListView.ItemContainerTransitions>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
在我的userControl xaml.cs中,我有以下
private ObservableCollection<TestEntityBase> _Details = new ObservableCollection<TestEntityBase>();
public ObservableCollection<TestEntityBase> Details
{
get { return _Details; }
set
{
SetProperty(ref _Details, value);
}
}
以下自定义事件(由userControl.xaml.cs订阅)负责将项目添加到上述可观察的集合中。该事件是由另一个用户控件的按钮单击触发的。每次单击按钮,都会清除并添加项目。
private void OnLoadingModuleEntity(IList<EntityBase> entities)
{
Details.Clear();
foreach (EntityBase entity in entities)
{
TestEntityBase entityBase = new TestEntityBase();
// Conversion logic goes here
//
Details.Add(entityBase);
}
}
使用的数据模板
<Grid Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal">
<TextBlock Name="Sync" FontFamily="Segoe MDL2 Assets"
Text="" VerticalAlignment="Center" FontSize="10"
ToolTipService.Placement="Top"
Margin="0,0,10,0" Visibility="{x:Bind IsSyncVisible,Mode=OneWay,Converter={StaticResource BoolToVisibilityConverter}}"/>
<CheckBox x:Name="CheckBox"
IsThreeState="False" Opacity="0.2"
MinWidth="10"/>
</StackPanel>
<Border Grid.Column="1" BorderThickness="0,0,0,1" Height="40" BorderBrush="#f0f0f0">
<Grid>
<RelativePanel VerticalAlignment="Center">
<TextBlock Name="Name" Text="{x:Bind Name}"
VerticalAlignment="Center" Opacity="0.5"
TextWrapping="Wrap"/>
<Image Name="Dot1" Source="/test/Assets/abc.jpg"
Height="6" Width="6"
VerticalAlignment="Center" Margin="10,8,0,0"
RelativePanel.RightOf="Name" />
<TextBlock Name="Date1" Text="{x:Bind date2String}" Opacity="0.5"
VerticalAlignment="Center" Margin="10,0,0,0"
RelativePanel.RightOf="Dot1" />
<Image Name="Dot2" Source="/test/Assets/321.jpg"
Height="6" Width="6"
VerticalAlignment="Center" Margin="10,8,0,0"
RelativePanel.RightOf="Date1"/>
<Image Name="Name2" Source="/test/Assets/123.jpg"
Height="10" Width="10"
VerticalAlignment="Center" Margin="10,5,0,0"
RelativePanel.RightOf="Dot2"/>
<TextBlock Name="Others Text="{x:Bind Others}" Opacity="0.5"
VerticalAlignment="Center" Margin="10,0,0,0"
RelativePanel.RightOf="Name2"/>
</RelativePanel>
</Grid>
</Border>
</Grid>
答案 0 :(得分:0)
尝试一下:
private void OnLoadingModuleEntity(IList<EntityBase> entities)
{
ObservableCollection<TestEntityBase> tempObservable = new ObservableCollection<TestEntityBase>();
foreach (EntityBase entity in entities)
{
TestEntityBase entityBase = new TestEntityBase();
// Conversion logic goes here
//
tempObservable.Add(entityBase);
}
Details = tempObservable;
}