Chcę uzyskać wartość zagnieżdżonej właściwości obiektu (coś podobnego do Person.FullName.FirstName). Widziałem, że w .Net istnieje klasa o nazwie PropertyPath, który WPF używa do podobnego celu w Binding. Czy istnieje sposób ponownego użycia mechanizmu WPF, czy też powinienem napisać go samodzielnie.Czy istnieje sposób na uzyskanie wartości właściwości obiektu przy użyciu klasy PropertyPath?
Odpowiedz
Ponowne wykorzystanie właściwości PropertyPath jest kuszące, ponieważ obsługuje przeszukiwanie zagnieżdżonych właściwości podczas wskazywania i indeksowania. Możesz napisać podobną funkcjonalność samodzielnie, mam już siebie w przeszłości, ale wymaga to półautomatycznego parsowania tekstów i mnóstwa refleksji.
Jak wskazuje Andrew, można po prostu ponownie użyć właściwości PropertyPath z WPF. Zakładam, że chcesz tylko ocenić tę ścieżkę względem obiektu, który masz, w którym to przypadku kod jest trochę zaangażowany. Aby ocenić właściwość PropertyPath, należy ją zastosować w powiązaniu z obiektem zależnym. Aby to zademonstrować, właśnie stworzyłem prosty obiekt DependencyObject o nazwie BindingEvaluator, który ma pojedynczą właściwość DependencyProperty. Prawdziwa magia dzieje się wtedy, wywołując BindingOperations.SetBinding, która stosuje wiązanie, abyśmy mogli odczytać oszacowaną wartość.
var path = new PropertyPath("FullName.FirstName");
var binding = new Binding();
binding.Source = new Person { FullName = new FullName { FirstName = "David"}}; // Just an example object similar to your question
binding.Path = path;
binding.Mode = BindingMode.TwoWay;
var evaluator = new BindingEvaluator();
BindingOperations.SetBinding(evaluator, BindingEvaluator.TargetProperty, binding);
var value = evaluator.Target;
// value will now be set to "David"
public class BindingEvaluator : DependencyObject
{
public static readonly DependencyProperty TargetProperty =
DependencyProperty.Register(
"Target",
typeof (object),
typeof (BindingEvaluator));
public object Target
{
get { return GetValue(TargetProperty); }
set { SetValue(TargetProperty, value); }
}
}
Jeśli chcesz przedłużyć to, możesz połączyć zdarzenia PropertyChanged w celu obsługi zmian wartości odczytu. Mam nadzieję, że to pomoże!
Nie widzę żadnego powodu, dla którego nie można go użyć ponownie.
Zobacz PropertyPath
:
Implementacja struktury danych dla opisujące właściwości jako ścieżka poniżej innego mienia, lub poniżej na posiadanie typu. Ścieżki właściwości są używane w powiązaniu danych z obiektami oraz w scenorysach i liniach czasowych animacji.
- 1. Czy istnieje sposób na uzyskanie wszystkich wartości w NSUserDefaults?
- 2. Czy istnieje prosty sposób na uzyskanie rozmiaru obiektu java?
- 3. Czy istnieje sposób na uzyskanie domyślnego obiektu $ .ajax?
- 4. Czy istnieje sposób na uzyskanie reprezentacji ciągów wartości HRESULT przy użyciu interfejsu API win?
- 5. Dwa sposoby na uzyskanie wartości obiektu Point?
- 6. C# uzyskanie wszystkich właściwości obiektu
- 7. Czy istnieje sposób przekonwertowania obiektu Ember do zwykłego obiektu javascript?
- 8. Czy istnieje sposób na zresetowanie wszystkich właściwości statycznych określonej klasy?
- 9. Czy istnieje sposób na uzyskanie nazwy klasy klasy pochodnej QObject bez tworzenia instancji tej klasy?
- 10. Czy istnieje sposób na uzyskanie typu "bieżącej funkcji"?
- 11. Czy istnieje sposób na uzyskanie obwiedni (w pikselach) elementu DOM?
- 12. Czy istnieje sposób na uzyskanie pi w arkuszu kalkulacyjnym CSS?
- 13. Pierwsze obiektu zagnieżdżonego Wartość właściwości przy użyciu odbicia
- 14. Filtrowanie właściwości obiektu na podstawie wartości
- 15. Czy istnieje sposób na uzyskanie IEqualityComparer od programu IComparer?
- 16. Suma całkowita dla wartości właściwości obiektu na liście przy użyciu funkcji lambda
- 17. Czy istnieje sposób na odpytywanie przy użyciu usługi WatchService?
- 18. Czy przy użyciu instancji obiektu jako dobrej praktyki wartości wpisu?
- 19. Czy istnieje sposób na wygenerowanie adresowanego adresu URL dla obiektu S3 przy użyciu interfejsu AWS CLI?
- 20. Czy istnieje sposób na uzyskanie danych wyjściowych jQuery * rzeczywisty znacznik *?
- 21. Czy istnieje sprytny sposób na uzyskanie sortable target w jQueryUI
- 22. Czy istnieje łatwy sposób na uzyskanie nazwy ServerName w Symfony?
- 23. Czy istnieje sposób na uzyskanie REPL w pydev?
- 24. Czy istnieje sposób na uzyskanie "nazwanych" komórek za pomocą EPPlus?
- 25. Czy istnieje sposób na uzyskanie postępu przesyłania jQuery ajax?
- 26. Czy istnieje sposób na uzyskanie identyfikatora pakietu w czasie wykonywania?
- 27. Czy istnieje sposób na uzyskanie wszystkich zarządzanych jednostek z EntityManager
- 28. Czy istnieje sposób na uzyskanie wyjątku w Haskell?
- 29. Czy istnieje prosty sposób na uzyskanie wymiarów obrazu w Ruby?
- 30. Czy istnieje sposób na uzyskanie danych pikseli z Internet Explorera?
Jak można napisać z powrotem do tej nieruchomości? –
Właśnie zaktualizowałem próbkę kodu, aby uwzględnić Aktualizację celu. Musisz tylko upewnić się, że Binding jest TwoWay i zapewnić seterowi. –