WPF Bind ke dirinya sendiri


89

Saya punya WPF Window, dan di suatu tempat ada ListViewtempat saya mengikatnya List<string>.

Sekarang di suatu tempat di saya ListViewada TextBoxdan Contentproperti diatur ke {Binding}.

Tapi ini singkatannya. Bagaimana cara menulis full binding untuk mengikat dirinya sendiri?

{Binding Path=Self}tidak berfungsi, begitu pula {Binding Self}(di mana yang terakhir adalah jalan pintas untuk yang pertama).


Saya ingin menyebutkan sebuah posting yang terkait dengan topik ini. Jawaban di atas benar-benar benar tetapi ada satu poin yang melengkapi jawaban di atas. Ini tautannya .
Ali Fattahian

Jawaban:


251

Jawaban singkat : {Binding}adalah tidak jalan pintas untuk "mengikat dirinya sendiri" (dalam arti RelativeSource.Self ). Sebaliknya, {Binding} setara dengan {Binding Path=.} , yang mengikat ke sumber saat ini.


Untuk menguraikan : Pengikatan memiliki sumber dan jalur . Anda dapat melakukan "pengikatan dirinya sendiri", misalnya, dengan menggunakan

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

Namun, ini menyetel sumber ke kontrol itu sendiri, sehingga ia akan mencoba mengakses properti xkontrol UI (bukan properti xkonteks data saat ini). Dari bagaimana saya memahami pertanyaan Anda, ini bukanlah yang Anda inginkan; secara khusus, bukan itu yang {Binding}dilakukannya: {Binding}menjaga sumber sebagaimana adanya (biasanya DataContextdari beberapa elemen induk) dan mengikat ke sumber itu sendiri (setara dengan Path=.).


Saya memiliki DataGrid di mana jika pengguna mengakses salah satu Perintah MenuItem ContextMenu melalui KeyBinding InputBinding yang CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}", itu akan meneruskan SelectedItems ke Bound ICommand. Namun, nullditeruskan jika diakses melalui ContextMenu. Saya sudah mencoba CommandParameter="{Binding SelectedItems}" , "{Binding ElementName = MyDataGrid, Path = SelectedItems}" `dan "{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}".
Tom

@ Tom: Ini sulit untuk dijawab dalam komentar. Harap buat pertanyaan baru dan berikan contoh minimal yang dapat direproduksi .
Heinzi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.