2011-09-13 31 views
7

Trong ứng dụng MVVM Silverlight 4 của tôi, tôi có thể chuyển đổi ngôn ngữ trong thời gian chạy:Silverlight ValidatesOnException nội địa hóa nhắn mặc định

public void SetLanguage(string language) 
{ 
    var culture = new CultureInfo(language); 
    Thread.CurrentThread.CurrentUICulture = culture; 
    Thread.CurrentThread.CurrentCulture = culture; 
    // ... 
} 

Đối với các đầu vào, tôi chỉ cần thêm "ValidatesOnException = true" trong trường hợp của các vấn đề chuyển đổi và nó làm việc làm. Tuy nhiên, thông báo ngoại lệ mặc định là trong văn hóa của hệ điều hành của tôi và không phải trong một hệ điều hành được chọn thủ công.

Trong chủ đề này trên exception message localization ý tưởng là thay đổi CurrentCulture và CurrentUICulture, mà tôi đã làm. Vì vậy, tôi là loại bị mắc kẹt.

Tôi có thể làm gì?

Cảm ơn :)

Edit: tôi đã cố gắng sử dụng một bộ chuyển đổi tùy chỉnh với một ngoại lệ tùy chỉnh trong phương pháp convertback để xác nhận đầu vào của người dùng. Vấn đề, một ngoại lệ trong một phương thức chuyển đổi là không bị bắt bởi validatesOnException, nó phá vỡ ứng dụng.

Chỉnh sửa 2: để làm rõ -> nếu tôi có thuộc tính thập phân được liên kết với hộp văn bản và tôi nhập "blabla" vào hộp văn bản này, tôi muốn thấy rằng có sự cố và tôi muốn thư ở đó miền địa phương thời gian chạy chứ không phải ngôn ngữ OS. Tôi không thể đưa ra một ngoại lệ trong setter tài sản của tôi bởi vì tôi không bao giờ đạt được điều đó, trình biến đổi mặc định làm tăng ngoại lệ của riêng nó trước đó.

Tôi hy vọng nó rõ ràng. Nếu tôi có thể giúp bạn để giúp tôi, xin đừng ngần ngại :)

Trả lời

0

Có lẽ bạn không thay đổi văn hóa ngay từ đầu.

tôi đề nghị bạn nên thử phương pháp được đưa ra trong câu trả lời đầu tiên trong liên kết này:

Change culture of Silverlight application

+0

tôi không muốn đặt ngôn ngữ trong hàm tạo, tôi muốn có thể thay đổi nó khi chạy. Điều này không áp dụng, this.language là tập hợp riêng tư. –

+0

Chỉ vì nó nằm trong hàm tạo không có nghĩa là nó không thể không chạy được.Sử dụng một constructor parameterized và bao gồm các logic tương tự như phương pháp SetLanguage bạn đã sử dụng –

0

Một cách tiếp cận có thể là thay đổi loại tài sản để string, ngay cả khi bạn đang lưu trữ một decimal giá trị đằng sau nó. Bộ thu sẽ gọi ToString trên giá trị decimal được lưu trữ và bộ đặt sẽ thực hiện chuyển đổi từ string sang decimal sử dụng Decimal.Parse hoặc tương tự. Cách tiếp cận này không có nghĩa là bạn phải tự mình thực hiện chuyển đổi kiểu, nhưng ít nhất nó cũng giúp bạn kiểm soát nhiều hơn một chút.

Trình thiết lập của bạn có thể ném ngoại lệ để chỉ ra lỗi xác thực. Ngoài ra, bạn có thể sử dụng một trong các giao diện IDataErrorInfoINotifyDataErrorInfo để hiển thị lỗi xác thực. This page có ví dụ về việc sử dụng IDataErrorInfo và this one có ví dụ sử dụng INotifyDataErrorInfo.

0

Bạn có thể sử dụng triển khai tùy chỉnh ValidationRule và thêm vào bộ sưu tập Binding.ValidationRules. Bạn sẽ phải xóa bộ sưu tập trước (Tôi không chắc chắn cách thực hiện XAML) và thêm quy tắc này (cách thực hiện nó được mô tả trong một trang MSDN).

Lớp này có phương thức Validate, nơi bạn có thể thực hiện xác thực và trả lại thông báo lỗi bạn muốn.

+0

không tồn tại trong silverlight, chỉ trong wpf:/ –

+0

ah, xin lỗi, tôi đã khá chắc chắn tôi nhận được danh tiếng +100;) Phiên bản SL là bạn sử dụng? Trong SL4 bạn có thể thực hiện giao diện IDataErrorInfo. –

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