我正在尝试创建一个可以一次播放多个视频的视频播放器。我已经让播放器工作了,现在我正试图让用户在运行时添加额外的视频。我在一个统一的网格中显示视频,它使用转换器来决定它应该根据视频的数量生成多少行和列。当您在运行之前定义有多少玩家时,它可以正常工作,但是当我在运行统一网格时添加玩家时,统一网格不会更新行或列。它只是将另一个视频添加到之前的任何结构中。无论如何我可以强制它重新评估行/列吗?
TL;DR:我可以在查看统一网格时重新评估它的行和列吗?如何 ?
控件的 xaml 如下。可能有用的附加信息:
1. Players 是 ObservableCollection
2. 控件显示为 TabControl
<UserControl x:Class="Views.AllVideos"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-Views"
mc:Ignorable="d">
<ItemsControl ItemsSource="{Binding Players}"
x:Name="AllVideosControl">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="{Binding Players, Converter={StaticResource CountToColumns}, Mode=OneWay}"
Rows="{Binding Players, Converter={StaticResource CountToRows}, Mode=OneWay}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="{DynamicResource AccentBrush}"
BorderThickness="1"
Margin="5">
<ls:PanelPreview DataContext="{Binding}"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</UserControl>