使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用
Posted
技术标签:
【中文标题】使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用【英文标题】:Creating audio player on WPF using NAudio. Binding doesn't work 【发布时间】:2019-12-27 15:45:25 【问题描述】:我正在使用 NAudio 在 WPF 上创建我的音频播放器。
我正在添加一个slider
,它将滚动歌曲。
XAML:
<Slider Height="30"
Value="Binding Path=MediaReader.Position, Mode=TwoWay"
Maximum="Binding Path=MediaReader.Length, Mode=OneWay"/>
注意。 MediaReader - 这是一个返回MediaFoundationReader
类型对象的属性:
MediaFoundationReader mediaReader;
public MediaFoundationReader MediaReader => mediaReader;
问题:当歌曲播放时,滑块属性Value
没有改变!但是通过滚动滑块的拇指,MediaReader
的属性 Position
会发生变化。
为什么会这样,我该如何解决?
【问题讨论】:
媒体阅读器未发送更改通知,因此无法更新 UI。 @Alejandro,谢谢!也许我应该创建一个计时器,每个刻度都会更新滑块? 您需要将模型包装在实现 INotifyPropertyChanged 接口的视图模型中 @BorisMakhlin 这是一种选择,但是这会占用大量 CPU。在库的文档中查找通知您的内容,例如更新位置的事件或回调。 使用更新绑定的行为怎么样? ***.com/a/44253691/8454410 【参考方案1】:看看这个教程:
https://www.pluralsight.com/guides/building-a-wpf-media-player-using-naudio
作者也使用了一个滑块控件,绑定了当前的轨道位置,例如:
<Slider Grid.Column="0" Minimum="0" Maximum="Binding CurrentTrackLenght, Mode=OneWay" Value="Binding CurrentTrackPosition, Mode=TwoWay" x:Name="SeekbarControl" VerticalAlignment="Center">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDown">
<i:InvokeCommandAction Command="Binding TrackControlMouseDownCommand"></i:InvokeCommandAction>
</i:EventTrigger>
<i:EventTrigger EventName="PreviewMouseUp">
<i:InvokeCommandAction Command="Binding TrackControlMouseUpCommand"></i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Slider>
public double CurrentTrackPosition
get return _currentTrackPosition;
set
if (value.Equals(_currentTrackPosition)) return;
_currentTrackPosition = value;
OnPropertyChanged(nameof(CurrentTrackPosition));
我想你可以理解这背后的想法......
【讨论】:
以上是关于使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用的主要内容,如果未能解决你的问题,请参考以下文章
从 NAudio 访问 WPF MediaElement 声音流
我可以同时从音频流缓冲区写入和播放(在 NAudio 中)吗?