2010-10-23 29 views
5

Tôi có quyền kiểm soát với thuộc tính public MyClass MyProperty{...} giá trị nào được hiển thị trên màn hình dưới dạng biểu đồ. Tôi muốn thuộc tính này được ràng buộc với bất kỳ trường hợp nào khác MyClass trong chương trình bằng cách sử dụng lớp Binding (MyProperty sẽ là tham số propertyName trong số thisBinding constructor và MyClass khác sẽ là thông số dataMember).OneWay ràng buộc trên WinForms?

MyClass thực hiện INotifyPropertyChanged để mọi thứ ở bên đó đều ổn. Nhưng nó sẽ xảy ra nếu tôi không thực hiện một truy cập get trong MyProperty và cố gắng ràng buộc một cái gì đó với nó, tôi nhận được một "Không thể liên kết với thuộc tính 'MyProperty' trên điều khiển đích" Tên tham số: PropertyName " lỗi.

Điều này có nghĩa là tôi để thực hiện một accessor get ngay cả khi tôi biết tôi sẽ không bao giờ cần phải đọc giá trị của nó và tôi muốn có một OneWay (nguồn để nhắm mục tiêu) ràng buộc, và ngay cả khi tôi chỉ trả lại null trong get accessor?

Tôi đoán lớp Binding sử dụng điều này để so sánh giá trị mới với giá trị cũ hoặc để thực hiện một số nội dung khác. Tôi không chắc chắn, sau đó, nếu bạn nên trả lại null, hoặc tốt hơn là luôn giữ một bản sao của bất kỳ đối tượng cuối cùng nào được gán với người truy cập set và gửi lại trong trình truy cập get. Có lẽ tôi thực sự thậm chí không cần phải viết một accessor get và tôi đang làm điều gì đó sai trái. Nó chỉ xảy ra mà tôi nhận được lỗi chỉ khi tôi nhận xét ra các accessor get và ngừng nhận được nó khi tôi đặt nó trở lại.

Edit: Trong trường hợp có bất kỳ sự nhầm lẫn: Khi tôi nói giá trị MyProperty 's được hiển thị trên màn hình như một đồ thị tôi không có nghĩa là nó có một giá trị mà một số mã khác đọc và hiển thị trong màn hình. Không ai đọc bất kỳ giá trị nào từ MyProperty. MyProperty 's set accessor là một trong đó rút ra công cụ trên màn hình và đó là kết thúc của chu kỳ.

+1

Vui lòng định dạng lại mục này để sử dụng các đoạn văn. –

+0

Có một ràng buộc OneWayToSource. Thật khó để nói nếu nó sẽ giải quyết vấn đề của bạn, bởi vì tôi không thể đọc qua toàn bộ điều :) Cung cấp cho một số clip ngắn của mã ví dụ, quá. –

+0

Thực ra tôi đã nghĩ về các đoạn văn nhưng không chắc chắn nên đặt chúng ở đâu. Tôi sẽ đặt chúng ở đâu đó xung quanh :). – Juan

Trả lời

6

Tôi không chắc chắn 100% tôi hiểu những gì bạn có ý nghĩa, nhưng tôi nghĩ rằng ngoại trừ bạn đang gặp phải xuất phát từ CheckBinding chức năng lớp của Binding (reflectored):

if (descriptor.IsReadOnly && (this.controlUpdateMode != ControlUpdateMode.Never)) 
{ 
    throw new ArgumentException(SR.GetString("ListBindingBindPropertyReadOnly", new object[] { this.propertyName }), "PropertyName"); 
} 

Do đó, thay đổi của Binding ControlUpdateMode đến ControlUpdateMode.Never có thể là những gì bạn đang tìm kiếm

+0

Ồ ... có ý nghĩa. – Juan

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