【问题标题】:Creating audio player on WPF using NAudio. Binding doesn't work使用 NAudio 在 WPF 上创建音频播放器。绑定不起作用
【发布时间】: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。在库的文档中查找通知您的内容,例如更新位置的事件或回调。
  • 使用更新绑定的行为怎么样? stackoverflow.com/a/44253691/8454410

标签: c# wpf naudio


【解决方案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));
        }
    }

我想你可以理解这背后的想法......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多