2013-05-26 76 views
0

我在網格中有一個CheckBox和一個WrapPanel。 WrapPanel裏面有兩個TextBox。當CheckBox被選中時,整個WrapPanel被禁用。 TextBox的綁定到Properties.Settings.Default屬性。 TextBox也使用ValidationRule來驗證輸入。將文本框文本從設置返回到最後一個好值

我想要做的事情是:如果TextBox的一個或兩個都有驗證錯誤,我希望檢查CheckBox的行爲將TextBox的文本從Settings.Default屬性返回到最後一個好值,從而清除錯誤。

我真的不關心堅持一些嚴格的MVVM模式了(這個窗口很小,甚至沒有一個視圖模型。什麼是我覺得我達到了我想要的嗎?

的最簡單方法m通過向CheckBox的Checked屬性添加一個事件處理程序,但是在打開窗口時它會拋出NullReference,當連接事件處理程序時,我還沒有對minBox和maxBox的引用,我認爲

private void AllPages_Checked(object sender, RoutedEventArgs e) 
    { 
     minBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget(); 
     maxBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget(); 
    } 

;

  <CheckBox Name="AllPages" Margin ="10,0,0,0" Grid.ColumnSpan="3" Grid.Row="1" Content="All Pages" 
         IsChecked="{Binding Source={StaticResource Settings}, Path=Default.AllPages, Mode=TwoWay}"/> 
      <WrapPanel Margin="10" Grid.Row="2" 
         IsEnabled="{Binding ElementName=AllPages, Path=IsChecked, Converter={StaticResource boolConvert}, Mode=OneWay}"> 
       <TextBox Name="minBox" MaxWidth="30" MinWidth="30" MaxLength="3"> 
        <TextBox.Text> 
         <Binding Source="{StaticResource Settings}" Path="Default.MinPage" Mode="TwoWay" 
           UpdateSourceTrigger="PropertyChanged"> 
          <Binding.ValidationRules> 
           <local:MinValidationRule/> 
          </Binding.ValidationRules> 
         </Binding> 
        </TextBox.Text> 
       </TextBox> 
       <Label Margin="0,0,0,0" Grid.ColumnSpan="3" Content="to"/> 
       <TextBox Name="maxBox" MaxWidth="30" MinWidth="30" MaxLength="3"> 
        <TextBox.Text> 
         <Binding Source="{StaticResource Settings}" Path="Default.MaxPage" Mode="TwoWay" 
           UpdateSourceTrigger="PropertyChanged"> 
          <Binding.ValidationRules> 
           <local:MaxValidationRule/> 
          </Binding.ValidationRules> 
         </Binding> 
        </TextBox.Text> 
       </TextBox> 
      </WrapPanel> 

回答

0

問題解決:

private void AllPages_Checked(object sender, RoutedEventArgs e) 
    { 
     if (minBox != null) minBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget(); 
     if (maxBox != null) maxBox.GetBindingExpression(TextBox.TextProperty).UpdateTarget(); 
    } 
相關問題