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'.

它还告诉我没有命令参数。我将如何绑定操作?

Metro 风格的窗口 7 WPF 应用程序 -toggleSwitch-.

首先,正如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,它可能不会工作。源代码

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