kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 B-Rad
B-Rad
Question

Bagaimana cara mengikat ke RelativeSource Self?

Saya mencoba untuk mengikat beberapa properti yang berbeda di Xaml saya:

<Label Content="{Binding Description}" 
Visibility="{Binding Path=DescriptionVisibility, 
ElementName=_UserInputOutput}"               
FontSize="{Binding Path=FontSizeValue, ElementName=_UserInputOutput}"  
HorizontalAlignment="Left" VerticalAlignment="Top" Padding="0" />

Anda akan melihat bahwa saya menggunakan dua teknik pengikatan yang berbeda di sini. Yang satu menggunakan Element Name, yang lain tidak. Berikut adalah kode di belakangnya:

public string Description
{
     get { return (string)GetValue(DescriptionProperty); }
     set { SetValue(DescriptionProperty, value); }
}
public static readonly DependencyProperty DescriptionProperty = 
DependencyProperty.Register("Description", typeof(string), typeof(UserControl), 
new UIPropertyMetadata(""));

Setiap Binding memiliki nama yang berbeda, namun secara garis besar terlihat seperti ini. Saya ingin Binding saya dapat digunakan:

{Binding Description}

Bukannya:

{Binding Path=Description, ElementName=_UserInputOutput}

Sepertinya hanya berfungsi ketika ElementName digunakan. Saya perlu mengekspor/mengimpor XAML ini, jadi saya tidak bisa memiliki ElementName atau impor tidak akan berhasil.

Saya pikir ini akan menjadi yang terbaik:

{Binding Path=Description, RelativeSource={RelativeSource Self}}

Ini tidak berhasil.

Ada ide? Terima kasih!

18 2012-08-16T20:57:45+00:00 2
 H.B.
H.B.
Pertanyaan edit 16 Agustus 2012 в 8:59
Pemrograman
wpf
binding
 H.B.
H.B.
16 Agustus 2012 в 10:57
2012-08-16T22:57:21+00:00
Lebih
Sumber
Sunting
#16973357

{RelativeSource Self} menargetkan objek yang memiliki properti yang sedang diikat, jika Anda memiliki pengikatan seperti itu pada Label maka akan mencari Label.Description, yang tidak ada di sana. Sebagai gantinya, Anda harus menggunakan {RelativeSource AncestorType = UserControl}.

Binding tanpa sumber (ElementName, Source, RelativeSource) bersifat relatif terhadap DataContext, namun dalam UserControl Anda harus menghindari pengaturan DataContext untuk tidak mengacaukan binding eksternal.

 Community
Community
Jawaban edit 23 Mei 2017 в 11:33
35
0
Solution / Answer
Joel Lucsy
Joel Lucsy
16 Agustus 2012 в 9:09
2012-08-16T21:09:16+00:00
Lebih
Sumber
Sunting
#16973356

Anda belum mengatur DataContext, yang digunakan RelativeSource untuk menentukan apa yang menjadi relasinya. Anda perlu mengatur DataContext pada tingkat yang lebih tinggi, seperti UserControl. Saya biasanya melakukannya:

<UserControl ... DataContext="{Binding RelativeSource={RelativeSource Self}}">
</UserControl>

Ini memberitahu UserControl untuk mengikat dirinya sendiri dengan kelas di dalam kode.

 Douglas
Douglas
Jawaban edit 9 Desember 2013 в 10:46
31
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Daniel Gogov
Terdaftar 2 hari yang lalu
2
工藤 芳則
Terdaftar 1 minggu yang lalu
3
Ирина Беляева
Terdaftar 1 minggu yang lalu
4
Darya Arsenyeva
Terdaftar 2 minggu yang lalu
5
anyta nuam-nuam (LapuSiK)
Terdaftar 2 minggu yang lalu
ID
JA
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi