Anahtarlara göre dizeleri çevirmek için işaretleme uzantısı yaptım. ÖrnekVeritabanının değerini bir MarkupExtension içinde nasıl çözebilirim?
<TextBlock Text="{Translate myKey}" />
Şimdi anahtarlarımı sağlamak için iç içe geçmiş bağlamaları kullanabilmek istiyorum. Örnek: Bir System.Windows.Data.Binding nesnesi aldığımda,
<TextBlock Text="{Translate {Binding KeyFromDataContext}}" />
ServiceProvider ProvideValue arama ve aşağı geçerek bir BindingExpression alabilirsiniz:
var binding = Key as Binding;
if (binding == null) {
return null;
}
var bindingExpression = binding.ProvideValue(_serviceProvider) as BindingExpression;
if (bindingExpression == null) {
return null;
}
var bindingKey = bindingExpression.DataItem;
Bu bindingExpression alabilirsiniz, ama Dataıtem özelliği null olur. Bağlantımı bu
gibi test ettim ve iyi çalışıyor.
Herhangi bir fikrin var mı?
Bağlantı değeri değiştiğinde, ProvideValue yeniden çağrılmıyor mu? Bunun için herhangi bir çözüm var mı? – Haytam
@Haitam, sorunun bağlayıcının değerini çözmekti. Değişebileceğinden şüpheleniyorsanız - bunun yerine "Değer" e bağlanan ve dönüştürücü kullanan başka bir bağ getirebilirsiniz. – torvin
Ekli mülkün burada nasıl çalıştığını açıklayabilir misiniz? Hedef.GetValue() 'dan 'null' ı her zaman alıyorum ... – spacer