WPF liên kết với chính nó


86

Tôi có một WPF Window, và ở đâu đó có một ListViewnơi mà tôi liên kết List<string>với.

Bây giờ ở đâu đó trong tôi ListViewcó một TextBoxvà thuộc Contenttính được đặt thành {Binding}.

Nhưng đây là tốc ký. Làm cách nào để viết đầy đủ ràng buộc để ràng buộc với chính nó?

{Binding Path=Self}không hoạt động, cũng không {Binding Self}(trong đó cái sau là một phím tắt cho cái trước).


Tôi muốn đề cập đến một bài đăng liên quan đến chủ đề này. Câu trả lời trên là hoàn toàn đúng nhưng có một điểm hoàn thiện câu trả lời trên. Đây là liên kết .
Ali Fattahian

Câu trả lời:


247

Trả lời ngắn gọn : {Binding}không một phím tắt cho "ràng buộc với chính nó" (theo nghĩa RelativeSource.Self ). Thay vào đó, {Binding} tương đương với {Binding Path=.} , liên kết với nguồn hiện tại.


Nói rõ hơn : Một ràng buộc có một nguồn và một đường dẫn . Ví dụ: bạn có thể thực hiện "ràng buộc với chính nó" bằng cách sử dụng

<myUIControl myProperty="{Binding RelativeSource={RelativeSource Self}, Path=x}" />

Tuy nhiên, điều này đặt nguồn thành chính điều khiển, vì vậy nó sẽ cố gắng truy cập xthuộc tính của điều khiển giao diện người dùng (thay vì xthuộc tính của bối cảnh dữ liệu hiện tại). Từ cách tôi hiểu câu hỏi của bạn, đây không phải là điều bạn muốn; cụ thể, nó không phải là những gì {Binding}: {Binding}giữ nguyên nguồn (thường là DataContextcủa một số phần tử mẹ) và liên kết với chính nguồn (tương đương với Path=.).


Tôi có một DataGrid trong đó nếu người dùng truy cập vào một trong các Lệnh của MenuItem của ContextMenu thông qua KeyBinding của InputBinding có CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}" , nó sẽ chuyển các SelectedItems đến Bound ICommand. Tuy nhiên, nullsẽ được thông qua nếu nó được truy cập thông qua ContextMenu. Tôi đã thử CommandParameter="{Binding SelectedItems}" , "{Binding ElementName = MyDataGrid, Path = SelectedItems}" `và "{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}".
Tom

@Tom: Cái này khó trả lời trong comment. Vui lòng tạo một câu hỏi mới và cung cấp một ví dụ có thể tái tạo tối thiểu .
Heinzi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.