我在涉足WPF並注意到一個我以前從未見過的特性。在下面的示例中,我有兩個文本框綁定到代碼隱藏中的同一個DP。驗證錯誤導致綁定不更新
代碼隱藏:
public partial class MainWindow : Window
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(Window), new FrameworkPropertyMetadata("Hello"));
public MainWindow()
{
InitializeComponent();
}
}
而XAML:
<TextBox>
<TextBox.Text>
<Binding RelativeSource = "{RelativeSource Mode=FindAncestor, AncestorType=Window}" Path="Text" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
<Binding.ValidationRules>
<utils:RestrictInputValidator Restriction="IntegersOnly" ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox Name="TextBox" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Mode=TwoWay, Path=Text, UpdateSourceTrigger=PropertyChanged}"/>
我注意到,當我在包含失敗驗證(在這種情況下,任何東西了IntegerOnly驗證文本框輸入的東西這不是一個整數),底層的Text變量不會更新。 這是默認行爲嗎?它爲什麼這樣做?是否可以重寫?
爲什麼要添加驗證,如果你要重寫它呢? –
我不會,你是對的。但是可能會有一個模糊的用例,我需要查看代碼隱藏中的髒數據。 –
您需要驗證的地方?你需要用戶嗎?或者你只是需要它的最終輸入?如果你需要後者,只需添加一個按鈕,然後彈出一個「MessageBox」來指出哪個字段是錯誤的,並且不會繼續,直到所有驗證都通過。看看[這個](http://stackoverflow.com/a/1268648/1466627)。 –