我試圖創建一次可以播放多個視頻的視頻播放器。我已經讓玩家工作,現在我試圖讓用戶在運行時添加更多視頻。我使用統一網格顯示視頻,該視頻使用轉換器根據視頻數量決定應該生成多少行和多少列。當你在運行之前定義有多少玩家時,它可以正常工作,但是當我在添加玩家的同時運行統一網格不會更新行或列時。它只是將其他視頻添加到之前的任何結構中。無論如何,我可以強迫它重新評估行/列?重新評估UniformGrid行和列WPF
TL; DR:我可以在查看時重新評估統一網格的行和列嗎?怎麼樣 ?
該控件的xaml位於下方。 其他信息來源,可能是有用的:
1.運動員是一個ObservableCollection正在呈現與一個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>
http://stackoverflow.com/questions/15178726/setting-rows-of-itempaneltemplate-uniformgrid-through-c-sharp – StepUp
你養'的PropertyChanged( 「玩家」)'每次*計數*玩家的變化?因爲我看不到任何可以告訴那些綁定在計數改變時更新的東西。如果您可以重寫CountToColumns和CountToRows來獲取int,那麼您可以使用'{Binding Items.Count,RelativeSource = {RelativeSource Self}},Converter = {StaticResource CountToColumns}}'。 –
其實劃傷:我只是測試它和'行= {綁定的球員。Count}'完全適合我 - 如果'Players'是一個'ObservableCollection'。是嗎?如果是這樣,我只需重寫那些轉換器,以Players.Count爲模,就可以完成了。 –