Metro风格的Windows 7 WPF app -toggleSwitch-

时间:2013-01-25 14:23:40

标签: c# wpf mahapps.metro

我正在使用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 。我如何将行动绑定到这个?

2 个答案:

答案 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)

IsCheckedbool?属性,如果您传递ICommand,它可能无效。 Source code

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