在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
则绑定模式是另一种选择?
答案 0 :(得分: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}"/>
答案 1 :(得分:1)
不是直接的,但有选择。这只是一个。在绑定上创建转换器。对于converter参数,请传入复选框选中的值。
<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上加入一个setter,但只有在其他条件为真时才将传递的值应用于private _TextXYZ。其他条件将绑定到复选框IsChecked。这应该是在ViewModel而不是对象类中完成的,但它可以在任何一个中完成。