Tôi đang sử dụng mẫu WPF và MVVM trong giao diện người dùng của mình. Trong ViewModel của tôi, tôi có một danh sách chứa khoảng cách tính bằng milimét, mà tôi hiển thị trong một ListView bằng cách ràng buộc ListView.ItemsSource vào Danh sách. Tuy nhiên, tôi muốn các giá trị được hiển thị để sử dụng đơn vị tự nhiên hơn - hoặc là mét hoặc chân tùy thuộc vào trạng thái của hộp kiểm "chỉ số".WPF và MVVM: Thay đổi chuyển đổi ràng buộc dữ liệu khi chạy
Tôi đã viết một vài lớp đơn giản, MillimetresToMetresConverter và MillimetresToFeetConverter, cả hai đều triển khai IValueConverter. Mặc dù tôi có thể đặt thuộc tính Chuyển đổi trên dữ liệu của tôi gắn kết với một hoặc khác, tôi không chắc chắn làm thế nào để thay đổi giữa các bộ chuyển đổi khi trạng thái của hộp kiểm thay đổi. Kế hoạch của tôi là có một trường "IValueConverter lengthConverter" trên ViewModel của tôi mà tôi có thể đặt thành một bộ chuyển đổi hoặc cái kia, sau đó trong XAML của tôi làm ...="{Binding Converter={Binding Path=lengthConverter}}"
- tiếc là nó không hoạt động vì Chuyển đổi không phải là thuộc tính phụ thuộc.
Làm cách nào để thay đổi bộ chuyển đổi được sử dụng bởi ràng buộc dữ liệu khi chạy?
Bạn sẽ có thể sử dụng DependencyObject.GetBinding (DependencyProperty), ví dụ: myTextBlock.GetBinding (TextBlock.TextProperty) để nhận (và sửa đổi) đối tượng Binding. – Heinzi
Thật không may, theo mô hình MVVM có nghĩa là mã sẽ cần phải sống trong ViewModel - mà không có tham chiếu đến khung nhìn và do đó không thể chạm vào "myTextBlock". – user200783