Я работаю над цифровым приложением вывесок WPF и базовая структура настроена следующим образом:WPF MVVM DataTemplates - Просмотр Не обновление
У меня есть один вид с сеткой в ней, связанной с объектом списка воспроизведения. Плейлист содержит панели, панели содержат элементы списка воспроизведения, а элементы списка воспроизведения содержат элемент контента. Я использую DataTemplates для создания представления для каждой части, например.
<!-- This template represents a single content pane, no real display here, just empty space with a height and width -->
<DataTemplate DataType="{x:Type entities:ContentPane}">
<ContentControl
Content="{Binding CurrentPlaylistItem, Mode=OneWay}"
Height="{Binding Height, Mode=OneTime}"
Width="{Binding Width, Mode=OneTime}"
HorizontalAlignment="Left"
VerticalAlignment="Top"
/>
</DataTemplate>
<!-- This is a playlist item which is contained within a ContentPane.
This also has no real display, just a placeholder for the content item, and will likely contain some transition information-->
<DataTemplate DataType="{x:Type entities:PlaylistItem}">
<inf:TransitionableContentControl Content="{Binding ContentItem}"></inf:TransitionableContentControl>
</DataTemplate>
<!-- image item template
the path can be any valid uri e.g. http://... or file://... -->
<DataTemplate DataType="{x:Type contentTypes:ImageContentType}">
<Grid Background="Transparent" x:Name="ImageType">
<Image Source="{Binding Bitmap, Mode=OneTime}"></Image>
<inf:BusinessAd
ContainerHeight="{Binding ImageHeight, Mode=OneTime}"
ContainerWidth="{Binding ImageWidth, Mode=OneTime}"
Visibility="{Binding AdText, Converter={StaticResource _VisibilityConverter}, Mode=OneWay}"
Text="{Binding AdText.Text, Mode=OneTime}"
AdFontSize="{Binding AdText.TextStyle.FontSize}"
AdFontFamily="{Binding AdText.TextStyle.FontFamily}">
<ContentControl
Content="{Binding AdText, Mode=OneTime}"
ContentTemplate="{StaticResource BusinessAdTextTemplate}">
</ContentControl>
</inf:BusinessAd>
</Grid>
</DataTemplate>
По мере изменения формата данных содержимое каждой панели переходит от одного элемента к другому. Я сталкиваюсь с проблемой, когда пользователь помещает один и тот же элемент в панель дважды подряд, будь то видео, изображение и т. Д. Что происходит, это изменение не отображается, и пользовательский интерфейс не обновляется. В случае видео он зависает в последнем кадре первого видео, и все приложение зависает.
Я попытался сделать OnPropertyChanged ("ContentItem") в классе PlaylistItem, попробовал параметр Shared = "False" в моих шаблонах данных, я попытался изменить свойства объекта ContentItem и поднял события PropertyChanged, ничего не работает. Я включил отслеживание привязки данных, чтобы увидеть, что происходит, и все работает правильно. Когда я изменяю свойства в ContentItem, он показывает новый хеш для нового элемента, но никаких изменений в пользовательском интерфейсе не происходит.
Внутри TransitionableContentControl в PlaylistItem переопределение OnContentChanged никогда не попадает при переходе от одного элемента контента к одному и тому же. Если я поменяю этот контроль с помощью обычного ContentControl, никаких изменений.
Вы пытались изменить режим с 'OneTime' на' OneWay'? –
Да, не имеет никакого эффекта –
Если бы вы могли каким-то образом предоставить образец проекта, который воспроизводит проблему, я был бы рад изучить это дальше. – Stipo