Metro 风格的窗口 7 WPF 应用程序 -toggleSwitch-.
本文关键字:WPF 应用程序 -toggleSwitch- 窗口 风格 Metro | 更新日期: 2023-09-27 17:55:54
我目前正在摆弄我的一个较旧的 wpf 应用程序的外观,使用 MahApps metro 库。我被困在Controls:ToggleSwitch上,在那里我几乎可以绑定除命令之外的所有内容。当我尝试绑定如下命令时,
<Controls:ToggleSwitch Header="Start Playing" OnLabel="Stop" OffLabel="Play"
IsChecked="{Binding ToggleRecordCommand}"
CommandParameter="{Binding}" />
我收到这样的错误;
Error 62 A TwoWay or OneWayToSource binding cannot work on the read-only property 'ToggleRecordCommand' of type 'RecorderApp.View.MainWindowViewModel'.
它还告诉我没有命令参数。我将如何绑定操作?
首先,正如Brendan所说,IsChecked属性必须与具有INotifyPropertyChanged的通用属性绑定,而不是ICommand类型。
为了与命令绑定,最简单的解决方法是将Click
(或Checked
)事件与 xaml 一起使用.cs 代码隐藏工作。
在 XAML 中,如下所示。
<ToggleButton x:Name="recordButton"
Checked="OnRecordButton_Checked"
IsChecked={Binding IsRecording} />
在代码隐藏中,如下所示。
private void OnRecordButton_Checked(object sender, RoutedEventArgs e)
{
if (recordButton.IsChecked.GetValueOrDefault())
{
// Do your own logic to execute command. with-or-without command parameter.
viewModel.ToggleRecordCommand.Execute(null);
}
}
并且,在视图模型(假设)中,如下所示。
// Property for toggle button GUI update
public bool IsRecording{
get{ return _isRecording;}
set{
_isRecording = value;
NotifyPropertyChanged("IsRecording");
}
}
public ICommand ToggleRecordCommand{
// Your command logic.
}
IsChecked
是一个bool?
属性,如果你给它传递一个ICommand,它可能不会工作。源代码
如果您希望看到此功能得到支持,请在项目网站上提出问题,我们可以进一步讨论。