2013-04-29 108 views
0

如何根據TextBox.Text值檢查複選框?在WPF中,如何根據TextBox.Text值檢查複選框?

我對WPF有一點經驗。我有一個想法,可以做什麼,但沒有太多的經驗,如何完成它。

如何通過基於文本值__postCloseAuditBy的XAML檢查__postCloseAudit複選框?如果文本長度大於零,則應檢查複選框。

<CheckBox x:Name="__postCloseAudit" 
      Tag="{Binding LoginId}" 
      Click="__postCloseAudit_Click"> 

    <WrapPanel> 

     <TextBox x:Name="__postCloseAuditBy" 
       Width="94" 
       Text="{Binding PostCloseAuditBy }" /> 

     <TextBox x:Name="__postCloseAuditOn" 
       Width="132" 
       Text="{Binding PostCloseAuditOn }" /> 

    </WrapPanel> 

</CheckBox> 

回答

1

你寫一個value converterIsChecked屬性綁定到TextBox的文本。轉換器的工作是將文本作爲輸入並根據其長度決定檢查的狀態;這將在一個單獨的類中,所以它不完全代碼隱藏,但它很接近。

實例轉換器:

[ValueConversion(typeof(string), typeof(bool?))] 
public class TextToIsBoolConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
          object parameter, CultureInfo culture) 
    { 
     var s = (string)value; 
     return s.Length > 0; 
    } 

    public object ConvertBack(object value, Type targetType, 
           object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

與結合會是什麼樣子:

<CheckBox x:Name="__postCloseAudit" 
    Tag="{Binding LoginId}" 
    Click="__postCloseAudit_Click" 
    IsChecked="{Binding ElementName=__postCloseAuditBy, Path=Text, Converter={StaticResource myConverter}}"> 

如果你使用MVVM那麼你的視圖模型應該歸入轉換器的功能和揭發基於計算特性值爲PostCloseAuditBy

+1

從未見過您在轉換器上方使用的屬性,它有什麼作用? – 2013-04-29 23:09:43

+0

@JohanLarsson:這是[這一個](http://msdn.microsoft.com/en-us/library/system.windows.data.valueconversionattribute.aspx)。您不需要*它,它具有信息角色(文檔建議設計時工具可以通過反映包含轉換器的程序集獲益)。我剛剛將它從MSDN示例中解除,因爲它已經在那裏。 – Jon 2013-04-29 23:13:49

+0

@Jon;有趣。我終於明白我可以使用一個轉換器,因爲這是我所知道的。然而,我從來沒有想過你可以將Path屬性設置爲Text屬性。但事後看來,這非常合理。 – AMissico 2013-04-30 02:04:38