0

私は現在、MahAppsメトロ ライブラリを使用して、古い wpf アプリの 1 つの外観をいじっています。コマンド以外のほとんどすべてをバインドできる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

まず、ブレンダンが言ったように、IsChecked プロパティは、ICommand タイプではなく、INotifyPropertyChanged を持つ一般的なプロパティにバインドする必要があります。

Command でバインドするための最も簡単な回避策は、Click(またはChecked) event を 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

IsCheckedbool?プロパティであり、ICommandを渡すと機能しない可能性があります。ソースコード

これをサポートしたい場合は、プロジェクトサイトで問題を提起してください。さらに話し合うことができます。

于 2013-02-03T07:14:01.003 に答える