我有XAML表单,其中包含(我简化的代码以保持透明):
<Grid>
<TextBlock Grid.Row="0"
FontSize="20"
Foreground="Yellow"
Text="{Binding ErrorMessage}"/>
... some others controls ...
<MediaElement x:Name="mediaPlayer"
Grid.Row="0"
Grid.RowSpan="5"
Grid.Column="0"
Grid.ColumnSpan="3"
Loaded="mediaPlayer_Loaded"
LoadedBehavior="Manual"
MediaEnded="mediaPlayer_MediaEnded"
Source="{Binding CurrentAd.Path}" />
</Grid>
背后的代码:
private void mediaPlayer_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
mediaPlayer.Play();
}
private void mediaPlayer_MediaEnded(object sender, System.Windows.RoutedEventArgs e)
{
mediaPlayer.Position = new TimeSpan(0, 0, 0, 0, 1);
mediaPlayer.Play();
}
正如您所看到的,当CurrentAd对象不为空时MediaElement在全屏显示并播放它并在完成时再次启动。 Viewmodel包含每10秒钟经过一次的计时器并设置ErrorMessage属性和CurrentAd属性(但只有当它改变时,方法Refresh() - 列在下面)。
来自DataContext的方法:
void Refresh()
{
try
{
Advertisment newAd = AdvertismentManager.GetCurrentAd();
if (!newAd.Equals(CurrentAd))
CurrentAd = newAd;
....
ErrorMessage = "";
}
catch(Exception ex)
{
ErrorMessage = ex.Message;
}
我的问题是每次调用刷新方法我的视频播放器都在重启。它不是由绑定的CurrentAd路径的更改引起的。它是由赋值ErrorMessage变量引起的。我没有在网上找到任何类似的问题,我认为这是奇怪的行为。有什么想法吗?