Dies ist ein ähnliches Problem zu WPF Binding : Casting in binding path, wo ich ein Objekt in einer XAML-Bindungsanweisung umwandeln muss. Aber ich kann nicht verstehen, wie man die Bindung in meinem speziellen Fall herstellt. Die Antwort auf diese Frage bezieht sich auf PropertyPath XAML Syntax, und der relevante Abschnitt ist (glaube ich) Single Property, Attached or Otherwise Type-Qualified
.WPF-Casting im Bindungspfad
In meinem Fall in meiner Hauptansicht Modell Ich habe ein Wörterbuch, das Strings Objekte zuordnet, die eine Basis-Schnittstelle implementieren:
Dictionary<string, IFlintStone> FlintStones { get; set;}
public interface IFlintStone { Walk, Talk etc}
public class FlintStone : IFlintStone { .. }
aber ich habe auch diese zusätzliche Aufgaben und Schnittstellen, das das Basisobjekt Unterklasse:
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 {..}
Und schließlich bevölkern ich mein Wörterbuch wie:
FlintStones["Fred"] = new Fred();
FlintStones["Wilma"] = new Wilma();
Nun habe ich in meinem XAML ein Benutzersteuerelement zum Rendern eines Fred
Objekts und eines weiteren zum Rendern eines Wilma
Objekts. Ich kann den Datenkontext dieser Bedienelemente setzen so etwas wie tun:
<FredControl DataContext="{Binding Path=FlintStones[Fred]}" />
<WilmaControl DataContext="{Binding Path=FlintStones[Wilma]}" />
aber mein Verständnis ist, dass dies nur die IFlintStone
Komponenten dieser Objekte zu ihren jeweiligen Bedienelemente aus. Aber ich mag die <WilmaControl>
Ist das möglich IFred
zum <FredControl>
und IWilma
aufzudecken und was wäre die Bindung Syntax in diesem Fall sein?
Ideen aus den Link ich oben Bezug genommen wurde, ich habe Dinge ausprobiert wie:
<FredControl DataContext="{Binding path=(myns:Fred.FlintStones[Fred])}" />
und
<FredControl DataContext="{Binding path=(myns:Fred).FlintStones[Fred]}" />
(Wo myns
eine Definition zeigt auf dem Fred
Objekt in der Baugruppe XAML-Namespace ist .)
Aber das Programm entweder abstürzt und brennt beim Start, oder es beschwert sich, dass esnicht finden kannals eine Eigenschaft des aktuellen Datenkontextes.
Dies ist ein wirklich klares Beispiel für komplexe Bindung Syntax. Ich frage mich, ob IntelliSense funktioniert, wenn Sie es eingeben? –
Die fehlende} 's war eine Über-Site .. Ich habe wirklich keine Klassen namens Fred und Wilma –
@PeterM - Ich werde diesen Teil aus der Antwort entfernen. Ich denke, ich hätte das merken müssen. Natürlich kennen Sie die Bindesyntax. –