0

XAML では、次を使用して TwoWay バインディングをローカル設定に設定できます。

<TextBox
    Name="TextXYZ"  
    Text="{Binding Source={x:Static local:Settings.Default}, 
            Path=TextXYZ, 
            Mode=TwoWay}" />
<CheckBox Content="" 
    Name="checkBox1" 
    IsChecked="{Binding Source={x:Static local:Settings.Default}, 
            Path=checkBox1, 
            Mode=TwoWay}" />
<CheckBox Content="" 
     Name="checkBoxSaveSettings" 
     IsChecked="{Binding Source={x:Static local:Settings.Default}, 
     Path=checkBoxSaveSettings, Mode=TwoWay}" />

XAML のバインディングにルールを導入してcheckBoxSaveSettings.IsChecked=true、コントロールが双方向バインディングを持つようにすることは可能checkBoxSaveSettings.IsChecked=falseですが、バインディング モードは別のオプションになりますか?

4

2 に答える 2

2

DataTrigger次のようにして、必要なものを達成できます。

<TextBox>
   <TextBox.Style>
      <Style TargetType="{x:Type TextBox}">
         <Setter Property="Text" Value="{Binding Source={x:Static local:Settings.Default}, Path=TextXYZ, Mode=OneWay}"/>
         <Style.Triggers>
            <DataTrigger Binding="{Binding Source={x:Static local:Settings.Default}, Path=checkBoxSaveSettings, Mode=OneWay}" Value="True">
               <Setter Property="Text" Value="{Binding Source={x:Static local:Settings.Default}, Path=TextXYZ, Mode=TwoWay}"/>
            </DataTrigger>
         </Style.Triggers>
      </Style>
   </TextBox.Style>
</TextBox>

ただし、コントロール値を変更できるため、この方法はユーザーにとってやや混乱を招くように聞こえますが、別の方法が有効になるまで有効になりませんCheckBox。次のようにバインドIsEnabledすることをお勧めします。checkBoxSaveSettings.IsChecked

<TextBox 
    Text="{Binding Source={x:Static local:Settings.Default}, Path=TextXYZ, Mode=TwoWay}"
    IsEnabled="{Binding ElementName=checkBoxSaveSettings, Path=IsChecked}"/>
于 2013-09-25T19:31:00.110 に答える
1

直接ではありませんが、これにはオプションがあります。これが1つだけです。バインディングにコンバーターを作成します。コンバーター パラメーターには、チェックボックスをオンにした値を渡します。

<TextBox
    Name="TextXYZ"  
    Text="{Binding Source={x:Static local:Settings.Default}, 
            Path=TextXYZ, 
            Converter={StaticResource foo},
            ConverterParameter = {Binding ElementName="checkBoxSaveSettings", Path="IsChecked",
            Mode=TwoWay}" />

次に、「foo」というコンバーターを作成します(必要なものは何でも)。その中で、パラメーターが true の場合は、渡された値を返します。パラメーターが false の場合は、Settings.Default.TextXYZ の値を含め、必要なものを何でも返すことができるため、何も変更されません。

別の可能なオプションは、TextXYZ にセッターを組み込むことですが、他の条件が真の場合にのみ、渡された値をプライベート _TextXYZ に適用します。その他の条件は、チェックボックス IsChecked にバインドされます。これは、オブジェクト クラスではなく ViewModel で行う必要がありますが、どちらでも機能します。

于 2013-09-25T18:58:10.050 に答える