2011-10-05 5 views
1

TextBox를 만들기위한 많은 참조가 숫자 항목 만 허용하는 것을 보았습니다 ... 아무런 문제가 없습니다. 어떻게해야하는지 이해합니다. 그러나 일반적인 바인딩은 여전히 ​​문자열 값인 TextBox의 "Text"(TextProperty 종속성)입니다.숫자 또는 DateTime 필드/속성에 대한 WPF TextBox 바인딩

입력 값을 강제로 숫자 값 (예 : 정수 또는 double, 최종 저장을 위해 float)으로 지정하는 경우 올바른 양방향 바인딩을 사용하면 어떻게됩니까

TextBox.MyInteger 
TextBox.MyDouble 
TextBox.MyFloat 
TextBox.MyDateTime 

그래서,

public class MyRecord 
{ 
    public int IntegerOnly { get; set; } 
    public double DoubleOnly { get; set; } 
    public DateTime SomeDate { get; set; } 
} 

(예를 들어)했다 클래스를했다 그리고 난 단지 숫자 (및 소수점)를 허용하는 적용 가능한 행동/필터 항목의 창에 텍스트 상자를 가지고있는 경우 값을 TextBox에 입력하면 표시된 "Text"값을 통해 사용자에게 표시됩니다.

그래서 "MyRecord.IntegerOnly"의 인스턴스에서 숫자 값을 데이터베이스로 보냄과 사용자가 보거나 편집 할 수 있도록 보냅니다.

C#의 모든 항목이 캐스팅되었으므로 텍스트에서 숫자로의 "묵시적"또는 "변환"값이 표시되지 않습니다.

마찬가지로 DATE 또는 DATETIME TextBox 컨트롤의 데이터 입력. 묵시적/전환 가치 없음 ...

어떻게해야합니까?

답변

2

귀하의 질문을 이해하지 못 하겠지만 Binding 클래스는 기본 유형의 전환을 처리합니다. TextBox.Text은 바인딩되는 대상 (int, double, DateTime 등)에 관계없이 문자열/텍스트 값만 표시 할 수 있습니다. Binding은 대상과 소스 간의 값을 앞뒤로 변환합니다. 즉, Int32 -> String (대상) 및 String -> Int32 (소스로 돌아 가기)입니다.

당신은 아주 쉽게이 TextBox에만 사용자가 String로 입력하려고하고 Binding가 예상 DateTime 값으로 변환됩니다 것을 알고 DateTime 값을 받아 지정할 수 있습니다. Binding에 의해 자동으로 처리되지 않는 값을 변환해야하는 경우 자신의 IValueConverter을 제공해야합니다.

귀하의 질문에 대한 답변이 되었습니까?

+0

내가 대답 했으므로 샘플을 시도해 보겠습니다. – DRapp

+0

고마워요 ... 나는 다른 모든 강력한 타입의 물건들에 대해 과도하게 생각하고 있었고, 내부적으로는 자동적으로 자동적으로 적절한 데이터 타입으로 /로부터 변환하고 있었다고 생각합니다. – DRapp