WPFでチェックボックス付きメニューのサンプルコード

コンピュータ

メニュー項目のチェックボックスをデータバインディングで管理するサンプルコードです。

・初期はチェック付き

・選択するとチェックが外れる


MainWindow.xaml

<Window x:Class="WpfCheckMenuDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfCheckMenuDemo"
        mc:Ignorable="d"
        
        Title="WpfCheckMenuDemo" Height="200" Width="300">
    <Window.DataContext>
        <local:MainWindowViewModel/>
    </Window.DataContext>
    <DockPanel>
        <!-- 上:メニュー -->
        <Menu
            DockPanel.Dock="Top"
            FontSize="14">
            <MenuItem Header="_File">
                <MenuItem
                    Header="チェック付き"
                    IsCheckable="True"
                    IsChecked="{Binding IsStatusBarVisible, Mode=OneWay}"
                    Command="{Binding ToggleStatusBarCommand}"/>
            </MenuItem>
        </Menu>
    </DockPanel>
</Window>

Mode=OneWayを付けないと、ずっとtrueのまま


MainWindowViewModel.cs

using Maywork.WPF.Helpers;

namespace WpfCheckMenuDemo;

class MainWindowViewModel : ViewModelBase
{
	private bool _isStatusBarVisible = true;

	public bool IsStatusBarVisible
	{
		get => _isStatusBarVisible;
		set => SetProperty(ref _isStatusBarVisible, value);
	}

	public RelayCommand ToggleStatusBarCommand { get; }

	public MainWindowViewModel()
	{
		ToggleStatusBarCommand = new RelayCommand(_ => ToggleStatusBar());
	}

	private void ToggleStatusBar()
	{
		IsStatusBarVisible = !IsStatusBarVisible;
	}
}

ViewModelBase.cs
RelayCommand.cs


コメント