2013-09-25 116 views
0

在XAML我可以設置雙向使用結合本地設置結合下述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然後控制將具有雙向約束力,但如果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用戶有點混亂。我會建議結合IsEnabledcheckBoxSaveSettings.IsChecked像這樣:

<TextBox 
    Text="{Binding Source={x:Static local:Settings.Default}, Path=TextXYZ, Mode=TwoWay}" 
    IsEnabled="{Binding ElementName=checkBoxSaveSettings, Path=IsChecked}"/> 
+0

我總是想使用的電流控制值,然而,'checkBoxSaveSettings.IsChecked =真'是一個設置,以確定是否改變控制值保存在更改時的設置。 – 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上合併一個setter,但只有在其他條件成立時將傳遞的值應用於私有_TextXYZ。該其他條件將被綁定到複選框IsChecked。這是應該在ViewModel而不是對象類中完成的,但它也可以工作。