活性化と非活性化が逆になってしまいます。
こうなっているということですか?そりゃそうですよね。
xml
1<Window
2 x:Class="Qt1azib5jefloqu.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="clr-namespace:Qt1azib5jefloqu"
6 Width="800"
7 Height="450">
8 <Window.DataContext>
9 <local:ViewModel />
10 </Window.DataContext>
11 <StackPanel>
12 <CheckBox Content="編集不可" IsChecked="{Binding IsEdit}" />
13 <TextBox IsEnabled="{Binding IsEdit}" Text="aaa" />
14 </StackPanel>
15</Window>
案1 チェックボックスの論理を逆にする
<CheckBox Content="編集可"
話が早いがおそらくそれは嫌なのでしょう。
案2 ViewModelにIsNotEdit
も用意する
バカバカしいしわかりにくい。
cs
1//TextBoxの入力可否用のプロパティ
2public bool IsEdit => !IsNotEdit;
3private bool _IsNotEdit;
4public bool IsNotEdit
5{
6 get => _IsNotEdit;
7 set
8 {
9 if (_IsNotEdit != value)
10 {
11 _IsNotEdit = value;
12 RaisePropertyChanged();
13 RaisePropertyChanged(nameof(IsEdit));
14 }
15 }
16}
xml
1<CheckBox Content="編集不可" IsChecked="{Binding IsNotEdit}" />
2<TextBox IsEnabled="{Binding IsEdit}" Text="aaa" />
案3 反転するコンバータ
wpf bool 反転 converter - Google 検索
昔はInverseBooleanConverter
が多かったですが、BoolNegationConverter
がはやり?のようなので合わせましたw
BoolNegationConverter Class (CommunityToolkit.WinUI.UI.Converters) | Microsoft Docs
xml
1<Window
2 x:Class="Qt1azib5jefloqu.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="clr-namespace:Qt1azib5jefloqu"
6 Width="800"
7 Height="450">
8 <Window.Resources>
9 <local:BoolNegationConverter x:Key="BoolNegationConverter" />
10 </Window.Resources>
11 <Window.DataContext>
12 <local:ViewModel />
13 </Window.DataContext>
14 <StackPanel>
15 <CheckBox Content="編集不可" IsChecked="{Binding IsEdit, Converter={StaticResource BoolNegationConverter}}" />
16 <TextBox IsEnabled="{Binding IsEdit}" Text="aaa" />
17 </StackPanel>
18</Window>
cs
1public class BoolNegationConverter : IValueConverter
2{
3 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
4 => !(value is bool && (bool)value);
5 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
6 => !(value is bool && (bool)value);
7}
リソースに登録するのが面倒な場合は、マークアップ拡張を使ったテクニックがあります。
wpf converter markupextension - Google 検索
あとはDataTrigger
もありますが、長くなるだけでメリットもないので省略。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。