我正在使用MahApps地铁图书馆摆弄我的一个旧版wpf应用程序。我坚持使用控件: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'.
它还告诉我没有 CommandParameter 。我如何将行动绑定到这个?
答案 0 :(得分:1)
首先,正如Brendan所说,IsChecked属性必须与具有INotifyPropertyChanged的一般属性绑定,而不是ICommand类型。
为了与Command绑定,最简单的解决方法是使用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);
}
}
并且,在ViewModel(假设)中,如下所示。
// Property for toggle button GUI update
public bool IsRecording{
get{ return _isRecording;}
set{
_isRecording = value;
NotifyPropertyChanged("IsRecording");
}
}
public ICommand ToggleRecordCommand{
// Your command logic.
}
答案 1 :(得分:0)
IsChecked
是bool?
属性,如果您传递ICommand,它可能无效。 Source code
如果您希望看到此支持,请在project site上提出问题,我们可以进一步讨论。