2013-09-25 5 views
0

В XAML я могу установить TwoWay привязку к местным условиям с использованием следующегоXAML связывания с правилами

<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 того управления будет иметь обязательный TwoWay но если checkBoxSaveSettings.IsChecked=false, тогда режим привязки - это еще один вариант?

ответ

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}"/> 
+0

Я всегда хочу, чтобы текущее значение управления, которые будут использоваться, однако, 'checkBoxSaveSettings.IsChecked = true' является установка для определения, если измененные контрольные значения сохраняются в Настройки при изменении. – user3357963

+0

Это прекрасно. Если у вас есть способ получить текущее контрольное значение, тогда первое решение должно работать – dkozl

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, но примените только переданное значение к private _TextXYZ, если какое-либо другое условие истинно. Это другое условие будет связано с флажком IsChecked. Это то, что должно быть сделано в ViewModel, а не в классе объектов, но оно будет работать и в.

Смежные вопросы