gpt4 book ai didi

c# - 如何处理 View 模型中的 Slider.ValueChanged 事件?

转载 作者:行者123 更新时间:2023-11-30 18:54:41 26 4
gpt4 key购买 nike

我有一个 PlayerV.xaml View ,里面有一个 slider :

<Slider Value="{Binding CurrentProgress}"/>

还有一个按钮:

<Button Content="next song" Command="{Binding playNext}"/>

按钮工作正常。按钮的 playNext 命令包含在 PlayerVM.cs

我希望 slider 的 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();
}

最佳答案

您有两个选择。首先,尽管您说过不想使用代码隐藏,但一个解决方案就是让您这样做。在 ValueChanged 事件处理程序中,您可以在值更改时简单地调用您的 View 模型方法:

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Slider slider = sender as Slider;
PlayerVM viewModel = (PlayerVM)DataContext;
viewModel.YourMethod(slider.Value);
}

我提供这个解决方案是因为我怀疑您是 MVVM 的新手并且仍然认为您不被允许使用背后的代码。事实上,根本不是这种情况,对于像这样的纯 UI 问题,这是一个很好的地方。

另一种选择是直接将属性数据绑定(bind)到 Slider.Value。随着 Slider 值的更改,该属性也会更改。因此,您可以简单地从数据绑定(bind)属性 setter 中调用您的方法:

public double CurrentProgress
{
get { return currentProgress; }
set
{
currentProgress = value;
NotifyPropertyChanged("CurrentProgress");
YourMethod(value);
}
}

另一个选项涉及在自定义附加属性中处理 ValueChanged 事件。这个解决方案比其他解决方案要多一些,所以我更愿意将您引导到我已经为其他问题编写的一些答案,而不是重新全部重写。请参阅我对 How to set Focus to a WPF Control using MVVM? 的回答和 WPF C# - navigate WebBrowser on mouseclick through Binding此方法的解释和代码示例的问题。

关于c# - 如何处理 View 模型中的 Slider.ValueChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25138695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com