Witam, czy ktoś wie, czy istnieją jakieś wbudowane klasy do rozwiązania związanego obiektu z obiektu bindingexpression i jego DataItem i ścieżka właściwości?Jak rozwiązać związany obiekt z bindingexpression z WPF?
Próbuję zapisać zachowanie Blend 3 dla pól tekstowych, które automatycznie wywołują metody na obiekcie powiązanym z właściwością Textbox pola tekstowego.
Pole tekstowe jest powiązane z właściwością w klasie viewmodel. To, co chcę zrobić, to rozwiązać klasę viewmodel z wyrażenia wiążącego, a następnie wywołać to.
ja najpierw pobrać wyrażenia wiązania z powiązanego obiektu zachowanie jest tak:
private BindingExpression GetTextBinding()
{
return this.AssociatedObject.GetBindingExpression(TextBox.TextProperty);
}
Uczyniwszy to, jeśli spojrzymy na wyrażeniu wiązania, widzimy, że ma odniesienie do kontekstu danych poprzez właściwość DataItem powiązania wyrażenia.
Ponadto mamy względną ścieżkę właściwości, która jest związana z powiązaniem macierzystym wyrażenia wiążącego.
Tak, możemy uzyskać te informacje: (? Re)
var bindingExpression = GetTextBinding();
object dataContextItem = bindingExpression.DataItem;
PropertyPath relativePropertyPath = bindingExpression.ParentBinding.Path;
Teraz ta droga nieruchomość mogłaby zostać głęboko zagnieżdżone i złożone ścieżka, którą chciałbym bardzo chciałbym uniknąć konieczności wdrożenia rozdzielczość z. Przeszukałem dokumentację .NET i odbiłem się od zgromadzeń z reflektorem, wszystko bezskutecznie - nie mogę znaleźć tego, co na pewno musi istnieć - musi istnieć jakaś klasa, która wykonuje rozdzielczość ścieżki dla dataitem (kontekst danych).
Czy ktoś wie, gdzie to może istnieć? Wszelkie sugestie dotyczące alternatywnych sposobów rozwiązania związanego obiektu?
Uwaga, próbuję dostać się do obiektu związanego, który jest rodzicem z powiązanej właściwości (ciąg w tym przypadku) - Oczywiście mogę łatwo uzyskać wartość powiązaną, ale jest to rodzic, którego potrzebuję .
Z góry dziękuję za pomoc! Phil
Dzięki zhech, że dam szansę. – Phil
My2cents, czy jest jakiś powód, dla którego przechodzisz w obiekcie dataItem? Dlaczego nie wystarczy zmienić sygnatury metody, aby uzyskać jeden parametr zamiast dwóch i uzyskać element dataItem z BindingExpression? – Terrance
To nie wygląda na to, że rozwiąże ścieżki właściwości za pomocą indekserów, czy nie? –