CollectionViewSource
'da saklanan ve DataGrid
'a bağlı bir nesne koleksiyonum var. Şu anda DataGrid
'da seçilen nesnenin 'ayrıntı görünümünü' görüntülemek istiyorum. Geçerli nesneyi CollectionViewSource.View.CurrentItem
kullanarak edinebilirim. bu özelliklerin her birinin IsImportant
özniteliği ile işaretlenmiş için ben yapmak istiyorum neWPF: Nesnenin özelliklerini (bazıları) bir nesnesine dinamik olarak bağlama
MyClass
{
[IsImportant]
AProperty{}
AnotherProperty{}
[IsImportant]
YetAnotherProperty{}
}
, bir liste kutusunda ekran (mülkiyet adıyla) bir etiket ve (düzenleme için) bir kontrolüdür. Bağlama, yapılan düzenlemeler, DataGrid ve destek nesnesi arasında çalışmalıdır. Görüntülenen denetim özelliği, boolean
, string
veya IEnumerable<string>
veya (belirtilemez ve yeni satır sınırlandırılmış dizeleri dönüştürmek için bir IValueConverter
yazmış olabilir) türüne göre değişebilir.
Bunu yapmak için bir yöntem bilen var mı? Şu anda aşağıda aracılığıyla her bir özellik değerlerini görüntüleyebilir, ancak düzenleme onları destek nesnesi güncelleme olmaz: elle özellik adları belirtmeden,
listBox.ItemsSource = from p in typeof(MyClass).GetProperties()
where p.IsDefined(typeof(IsImportant), false)
select p.GetValue(_collectionViewSource.View.CurrentItem, null);
, netleştirmek için bu 'automagicallylar' olmasını istiyoruz XAML. Özniteliklerle işaretlenmiş özellikleri temel alarak çalışma zamanında XAML'ye dinamik olarak ekleyebiliyorsam, bu da iyi olur.
O harika görünüyor; Bir şansım var ve onu nasıl yapacağını bildiğim kadarıyla uygulayacağım. Teşekkürler! –
Bu, çoğunlukla harika çalışıyor. Bağlantının ilk ayarlandığı sırada boş bir nesne aldığı için PropertyValueConverter'e yeni bir denetim ekledim. Tek sorun şu ki, eğer bu kontrolde bir değeri değiştirirsem, datagrid'e yayılmaz. Değişen değer, itemscontrol tarafından hala gösterildiğinden, ancak kılavuza bildirilmediğinden muhtemelen yedekleme nesnesi değişiyor. Bu Binding.DoNothing ile ilgisi var mı? –
@Daniel: Bir denetim tarafından yapılan güncellemelerin aynı mülke bağlı diğer denetimlere yansıtılmasını istiyorsanız, nesnenizin INotifyPropertyChanged öğesini uygulaması gerekir. Ayrıca, PropertyValue'da INotifyPropertyChanged uygulamasını da uygulamanız gerekir. PropertyValueConverter, tek yönlü olan ItemsSource bağlayıcısının kendisi içindir, bu yüzden ConvertBack çağrılmayacak ve Binding.DoNothing önemli olmayacaktır. – Quartermeister