Bạn có hai lựa chọn:
- Tạo đối tượng
Binding
bằng tay và đính kèm vào Format
và Parse
sự kiện và trao đổi các giá trị trong mỗi người.
- Tạo một tài sản bổ sung trên lớp mà chỉ đảo ngược logic của tài sản dự định
Tùy chọn đầu tiên là sạch, IMO, vì nó không buộc API của lớp học của bạn để làm theo thiết kế giao diện người dùng của bạn, mặc dù tùy chọn thứ hai là (nhẹ) dễ dàng hơn.
Ví dụ về Lựa chọn 1
private void SwitchBool(object sender, ConvertEventArgs e)
{
e.Value = !((bool)e.Value);
}
...
Binding bind = new Binding("Checked", this.object, "SomeBool");
bind.Format += SwitchBool;
bind.Parse += SwitchBool;
CheckBox1.DataBindings.Add(bind);
Ví dụ về Lựa chọn 2
public class SomeClass
{
public bool SomeBool { get; set; }
public bool NotSomeBool
{
get { return !SomeBool; }
set { SomeBool = !value; }
}
}
...
CheckBox1.DataBindings.Add("Checked", this.object, "NotSomeBool");
lần nữa, tôi rất ủng hộ phương án 1, vì phương án 2 yêu cầu bạn chỉnh lớp học của bạn để bạn Thiết kế giao diện người dùng.
Nguồn
2010-03-17 16:45:15
+1 Tôi thích tùy chọn đầu tiên của bạn, không biết :-) – Javier
Tôi đã biết tùy chọn 2 và có lẽ tôi đã đề cập rằng tôi không muốn đặt giao diện người dùng trong mô hình miền của mình, đó là lý do tôi đã không đi với nó. Điều đó nói rằng, tôi đã thực hiện tùy chọn đầu tiên thành công. Cảm ơn nhiều. Tôi muốn chỉ ra cho bất cứ ai có thể thấy điều này trong tương lai: Bạn không thể thêm ràng buộc đó vào nhiều điều khiển, người ta phải tạo ra một điều khiển giao diện người dùng (Đó là điều tôi muốn làm). –
+1 cho tùy chọn đầu tiên, tôi đã cố gắng để giải quyết điều tương tự. Tôi đã triển khai một phần mở rộng và một lớp 'BooleanBinding' cụ thể, nơi bạn có thể xác định xem có muốn liên kết ngược lại hay không dựa trên giải pháp của bạn! Tôi viết blog về nó ở đây: http://codewithpassion.blogspot.com/2010/11/binding-to-opposite-value-of-boolean.html –