2013-08-10 3 views
1

사용자가 몇 가지 값을 입력하는 대화 상자가 프로젝트에 있습니다. 그가 안타를 때 데이터베이스에 항목을 추가합니다. 내 데이터베이스 코드에 추가 그래서, Entity Framework을 사용하고는이 같은 것입니다 :WPF 유효성 검사 사용

TransactionItem _item = new TransactionItem(); 
       _item.DoctorID = (int)cmbDoctor.SelectedValue; 
       _item.TransactionCategoryID = (int)_dlg.cmbCat.SelectedValue; 
       _item.TransactionMethodID = (int)_dlg.cmbMethod.SelectedValue; 
       _item.Amount = int.Parse(_dlg.txtAmount.Text); 
       _item.DocumentID = _dlg.txtDocNum.Text; 
       _item.Info = _dlg.txtInfo.Text; 
       _item.Date = _dlg.dteDate.SelectedDate.ToString(); 
       _db.TransactionItems.Add(_item); 
       _db.SaveChanges(); 

그러나 문제는 바인딩과 검증 가능하게 아무것도이다. 내 창에서 빈 개체를 만들고 텍스트 상자를 바인딩하려고했지만 자체 문제가있어서 예상대로 작동하지 않았습니다. 사용자가 값을 입력하거나 OK를 눌렀을 때 모든 필드가 유효한지 확인하십시오. 예를 들어, 사용자가 아무 값도 입력하지 않은 경우 문제가 발생하는 경우, stringnotnull 유효성 검사기가 활성화되어 있어도 여전히 유효합니다. 하지만 가장 중요한 문제는 자동으로 텍스트 상자의 텍스트를 null로 설정하고 null 값으로 표시한다는 것입니다.

<TextBox Name="txtAmount" HorizontalAlignment="Left" Height="23" Margin="83,169,0,0" VerticalAlignment="Top" Width="224" Tag="T"> 
    <TextBox.Text> 
     <Binding Path="myitem" ElementName="myWindow" UpdateSourceTrigger="PropertyChanged"> 
      <Binding.ValidationRules> 
       <Validators:StringNullValidationRule/> 
       <Validators:IsNumericValidationRule/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 
+0

빈 텍스트 상자가 null이 아닙니다. 빈 문자열입니다. 동일하지 않습니다. –

답변

1

가 왜 각각의 값은 사용자에 대한 귀하의 ViewModel의 속성을 생성하지 않는 :

그리고 나는 여기에 내 자신의 유효성 검사기를 만들어 한 내가 내 텍스트 상자 중 하나를 구현하는 방법의 예입니다 들어 와서 바인딩해야합니까? 그런 다음 항목을 추가 할 때 이러한 속성을 사용할 수 있습니다.

뷰 모델 : : 예를 들어

public int Amount { get; set; } 

... 

public void AddItem() 
{ 
    TransactionItem _item = new TransactionItem(); 

    // ... 

    _item.Amount = Amount; 
} 

XAML :

<TextBox Name="txtAmount" HorizontalAlignment="Left" Height="23" Margin="83,169,0,0" VerticalAlignment="Top" Width="224" Tag="T"> 
    <TextBox.Text> 
     <Binding Path="DataContext.Amount" ElementName="myWindow"> 
      <Binding.ValidationRules> 
       <Validators:StringNullValidationRule/> 
       <Validators:IsNumericValidationRule/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

나는 또한 .NET 4.0을 사용하는 경우 INotifyDataErrorInfo interface (또는 IDataErrorInfo interface 한 번 봐 가지고 추천 또는 그 이하).