Tôi đã tạo phần mở rộng đánh dấu để dịch chuỗi dựa trên khóa. Ví dụLàm cách nào để giải quyết giá trị của một dữ liệu trong một MarkupExtension?
<TextBlock Text="{Translate myKey}" />
Bây giờ tôi muốn có thể sử dụng các kết buộc lồng nhau để cung cấp khóa của mình. Ví dụ:
<TextBlock Text="{Translate {Binding KeyFromDataContext}}" />
Khi tôi làm điều này, tôi nhận được đối tượng System.Windows.Data.Binding. Bằng cách gọi cho OfferValue và chuyển xuống ServiceProvider tôi có thể nhận được một BindingExpression:
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;
Tôi có thể nhận được liên kết nàyExpression, nhưng thuộc tính DataItem là rỗng. Tôi đã thử nghiệm sự ràng buộc của mình như thế này
<TextBlock Text="{Binding KeyFromDataContext}" />
và nó hoạt động tốt.
Bất kỳ ý tưởng nào?
Điều gì xảy ra nếu giá trị ràng buộc thay đổi, GiveValue không được gọi lại ngay? Có giải pháp nào cho điều này? – Haytam
@Haitam câu hỏi là về giải quyết giá trị của ràng buộc. Nếu bạn nghi ngờ nó có thể thay đổi - thay vào đó bạn có thể trả về một ràng buộc khác liên kết với 'Giá trị' và sử dụng trình chuyển đổi. – torvin
Bạn có thể giải thích cách thức tài sản đính kèm tại đây hoạt động không? Tôi luôn luôn nhận được 'null' từ' target.GetValue() '... – spacer