2011-01-05 39 views
5

Trong dự án MVVM của tôi, tôi có hai hộp văn bản một trong số đó được liên kết với trường số nguyên nullable của đối tượng của tôi và trường còn lại trong trường chuỗi. Khi khung nhìn tải nếu tôi nhập bất kỳ giá trị nào vào hộp văn bản được liên kết với thuộc tính chuỗi, tôi có thể thấy rằng giá trị của nó được cập nhật thành thuộc tính chuỗi của đối tượng.Giá trị có thể vô hiệu hóa không được cập nhật trong Silverlight XAML

Tuy nhiên vấn đề phát sinh khi tôi đã nhập một giá trị vào hộp văn bản được gắn kết với trường số nguyên nullable của đối tượng của tôi. Nếu nó là một giá trị số nguyên thích hợp thì giá trị sẽ được cập nhật. Nếu tôi đặt một chuỗi chữ số trong hộp văn bản được ràng buộc vào trường số nguyên nullable của đối tượng của tôi hoặc nếu tôi chỉ để trống nó thì trường số nguyên nullable của đối tượng của tôi không được cập nhật. Nó vẫn giữ lại bất cứ điều gì đã được thiết lập trước đó.

Ví dụ: nếu tôi nhập một số '7' vào hộp văn bản số, nó sẽ được cập nhật thành 7. Bây giờ nếu tôi thay đổi từ '7' thành '7a' hoặc 'a7' hoặc 'asd' hoặc để trống. Giá trị vẫn ở mức 7 là giá trị trước đó.

Bất kỳ công việc nào liên quan đến vấn đề này ngoài việc thay đổi loại không có giá trị?

Cảm ơn thời gian của bạn ...

Trả lời

1

Vấn đề ở đây là bất cứ khi nào bạn nhập empty string hoặc alphabet values trong TextBox của bạn cũng được ràng buộc để Nullable<Int32>, giá trị int nullable không được thiết lập.

Trong trường hợp này, ràng buộc không thành công khi chuyển đổi giá trị chuỗi thành giá trị số nguyên. Và sau khi thất bại, nó không đặt giá trị thành null, nhưng chỉ để lại giá trị cũ như cũ. Bạn có thể đảm bảo điều này đang xảy ra bằng cách gỡ lỗi.

Việc bạn có thể làm để giải quyết vấn đề này là tạo trình chuyển đổi. Bộ chuyển đổi này cố gắng chuyển đổi một giá trị chuỗi thành int và khi không làm như vậy, trả về giá trị rỗng sẽ được đặt thành giá trị của giá trị mặc định.

+0

Cảm ơn. Tôi đã thêm bộ chuyển đổi. Nhưng vấn đề với bộ chuyển đổi là nó sẽ trả về một null do đó xóa bỏ hộp văn bản. Tôi muốn người dùng thấy rằng họ đã nhập sai giá trị. Việc xóa hộp văn bản sẽ không cho phép chúng có lợi ... và chúng sẽ phải nhập lại toàn bộ số (như trong 16 chữ số mà bạn nhập đôi khi trên biểu mẫu) – user20358

6

Nếu bạn đã textbox bạn đeo mặt nạ để chỉ chấp nhận các giá trị số bạn cũng có thể sử dụng:

Text = {Binding PropertyName, Mode = TwoWay, TargetNullValue = ''}

này một cách chính xác sẽ thiết lập các int ràng buộc ? tài sản để null khi một chuỗi rỗng được phát hiện.

Các vấn đề liên quan