我們都知道如何開箱即用的WPF驗證。我正在嘗試一個非常簡單的事情,出於某種原因,它總是失敗。我有一個TextBox,我唯一的要求是驗證用戶在TextBox中輸入了什麼。 TextBox綁定到具有FirstName和LastName屬性的Customer對象。WPF文本框綁定驗證規則不會在LostFocus上觸發當TextBox爲空時
這裏是XAML代碼:
<TextBox Style="{StaticResource TextBoxStyle}" Grid.Column="1" Grid.Row="0" Height="20" Width="100" Margin="10">
<TextBox.Text>
<Binding Path="FirstName" >
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
這裏是Customer類姓屬性:
public string FirstName
{
get { return _firstName;}
set
{
if(String.IsNullOrEmpty(value))
throw new ApplicationException("FirstName cannot be null or empty!");
_firstName = value;
OnPropertyChanged("FirstName");
}
}
即使我拋出一個異常,如果名字(值)爲空或清空只有當我在TextBox中輸入某些內容然後將其刪除然後關閉時才能處理。原因是它依賴於財產變更事件。但即使我將該TextBox綁定到Focus上,它也不會觸發驗證。
UPDATE:
一個來處理這個問題最醜陋的方式是對的String.Empty分配給在Window.Loaded事件的文本框:
void AddCustomerWindow_Loaded(object sender, RoutedEventArgs e)
{
// get all the textboxes and set the property to empty strings!
txtFirstName.Text = String.Empty;
txtLastName.Text = String.Empty;
}
這裏是綁定的代碼:
public AddCustomerWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(AddCustomerWindow_Loaded);
gvAddCustomer.DataContext = new Customer();
}
如,你可以看到更新的代碼將TextBox綁定到一個新的客戶對象。當我在TextBox和Tab中不輸入任何內容時,不會發生任何事情。它應該啓動驗證,但它不會!唯一啓動驗證的方法是在Window.Loaded事件中手動分配TextBox的.Text屬性。 – azamsharp 2009-06-26 01:15:35