我在网格中有一个CheckBox和一个WrapPanel。 WrapPanel里面有两个TextBox。选中CheckBox时,将禁用整个WrapPanel。 TextBox绑定到Properties.Settings.Default属性。 TextBox还使用ValidationRule来验证输入。
我想做什么:如果一个或两个TextBox都有验证错误,我希望检查CheckBox的行为将TextBox的文本从Settings.Default属性返回到最后一个好的值,从而清除错误。
我真的不在乎坚持使用一些严格的MVVM模型了(这个窗口很小,甚至没有ViewModel。实现我想要的最简单的方法是什么?
我认为我通过向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 :(得分: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();
}