【发布时间】:2014-08-05 12:20:00
【问题描述】:
我有一个 PlayerV.xaml 视图,里面有一个 Slider:
<Slider Value="{Binding CurrentProgress}"/>
还有一个按钮:
<Button Content="next song" Command="{Binding playNext}"/>
按钮工作正常。 Button 的 playNext 命令包含在 PlayerVM.cs
中我希望滑块的 ValueChanged 调用存储在 PlayerVM.cs 中的函数:
[1]:<Slider Value="{Binding CurrentProgress}" ValueChanged="{Binding playNext}"/>
我知道 [1] 的语法不正确,我使用它是为了解释清楚。
====补充说明====
我知道我会写:
<Slider ValueChanged="Slider_ValueChanged" Value="{Binding CurrentProgress}" />
而在PlayerV.xaml.cs中会有
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
//some logic (actions)
}
}
但我不想要任何逻辑。我希望它位于 PlayerVM.cs 中(如按钮的命令处理函数)。 怎么做? 另外在我的 App.xaml.cs 启动功能是:
private void OnStartup(object sender, StartupEventArgs e)
{
MainWindow _mainWindow = new MainWindow();
PlayerVM playerVM = new PlayerVM();
_mainWindow.DataContext = playerVM;
_mainWindow.Show();
}
【问题讨论】:
-
当您将滑块的值绑定到 VM 的 CurrentProgress 属性时,每次使用滑块滑动时,它也会发生变化。因此,您只需从 CurrentProgress 属性的设置器中调用您需要的命令方法。确保您有 TwoWay 绑定模式
-
我认为我做错了什么。在 PlayerVM 中,我有一个线程(计时器滴答),它根据 mediaPlayer.Position 设置 CurrentProgress 值。但是我想当用户更改滑块的位置时->播放器的位置应该按照传递。我怎么知道 SLiders 的值是由用户更改的,而不是由 timer_ticks 函数更改的?
-
最简单的方法 - 你的股票有固定的 intrval 改变进度,在你的 setter 中只是比较旧值和新值,并根据结果做出选择
-
我想到了使用这种简单的方法。但是,事实证明,我之前的公式是不正确的,我认为这不是一个解决方案。现在我改进了配方,它起作用了!谢谢,@Den。