To jest podobny problem do WPF Binding : Casting in binding path, gdzie muszę rzucić obiekt w oświadczeniu wiążącym XAML. Ale nie potrafię zrozumieć, jak wykonać wiązanie w moim konkretnym przypadku.WPF Casting in Binding Path
Odpowiedź na to pytanie odnosi się do PropertyPath XAML Syntax, a odpowiednią sekcją jest (ja wierzę) Single Property, Attached or Otherwise Type-Qualified
.
W moim przypadku, moim głównym widoku modelu Mam słownika, który mapuje ciągi do obiektów, które implementują interfejs bazowy:
Dictionary<string, IFlintStone> FlintStones { get; set;}
public interface IFlintStone { Walk, Talk etc}
public class FlintStone : IFlintStone { .. }
Jednak mam też te dodatkowe przedmioty i interfejsy, które podklasy obiektu podstawowego:
public interface IFred : IFlintStone { Eat, Drink, Yell etc }
public interface IWilma : IFlintStone { Wash, Clean, Cook etc }
public class Fred : FlintStone, IFred {..}
public class Wilma : FlintStone, IWilma {..}
i ostatecznie I wypełnić mój słownika jak:
FlintStones["Fred"] = new Fred();
FlintStones["Wilma"] = new Wilma();
Teraz w moim XAML mam kontrolę użytkownika do renderowania obiektu Fred
, a drugą do renderowania obiektu Wilma
. Mogę ustawić kontekstu danych tych kontroli użytkowników robi coś takiego:
<FredControl DataContext="{Binding Path=FlintStones[Fred]}" />
<WilmaControl DataContext="{Binding Path=FlintStones[Wilma]}" />
Jednak moje rozumienie jest to, że będą wystawiać tylko IFlintStone
składowe tych obiektów do ich kontroli użytkowników. Ale chcę narażać IFred
do <FredControl>
i IWilma
do <WilmaControl>
Czy to możliwe, a co składnia wiązania byłoby w tym przypadku?
Korzystanie pomysły z linków ja przywołanych wyżej Próbowałem rzeczy jak:
<FredControl DataContext="{Binding path=(myns:Fred.FlintStones[Fred])}" />
i
<FredControl DataContext="{Binding path=(myns:Fred).FlintStones[Fred]}" />
(Gdzie myns
jest przestrzeni nazw XAML definicji wskazując na przedmiot Fred
w zespole .)
Ale program albo ulega awarii i spala się na starcie, albo skarży się, że nie może znaleźć Fred
jako właściwość bieżącego kontekstu danych.
Jest to bardzo wyraźny przykład skomplikowanej składni wiążącej. Zastanawiam się, czy IntelliSense działa podczas pisania? –
Brakujące} było ponad stroną. Naprawdę nie mam zajęć o nazwach Fred i Wilma –
@PeterM - usunę tę część z odpowiedzi. Chyba powinienem to sobie uświadomić. Oczywiście znasz składnię wiążącą. –