0

我目前正在摆弄我的一个使用MahApps Metro 库的旧 wpf 应用程序的外观。我被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'.

它还告诉我没有CommandParameter。我将如何将操作绑定到此?

4

2 回答 2

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.
}
于 2013-02-03T07:43:11.180 回答
0

IsChecked是一个bool?属性,如果您将其传递给 ICommand,则可能无法正常工作。源代码

如果您希望看到此支持,请在项目站点上提出问题,我们可以进一步讨论。

于 2013-02-03T07:14:01.003 回答