2012-04-06 6 views

Antwort

1

Nun, ich versuchte, die Bindung an eine Eigenschaft vom Typ Dictionary<Foo, String> (wo Foo ist eine Enumeration) wie folgt aus:

{Binding Foos[{x:Static my:Foo.Fizz}]} 

... aber das warf eine verbindliche Ausnahme zur Laufzeit.

Seltsamerweise scheint die Verwendung eines int als Indexer auch für Eigenschaften, die auf einem Enum indiziert sind, zu funktionieren. Dieses:

{Binding Foos[2]} 

... funktionierte gerade gut. Wenn Sie also Ihre enum-Werte als Ganzzahlen in XAML darstellen möchten, können Sie das auch tun.

Ansonsten denke ich, Ihre beste Wette wäre, direkt an Foos über einen Wertkonverter zu binden, {x:Static my:Foo.Bar} als Konverter Parameter übergeben.

+0

Ja, darüber spreche ich. Die Konvertierung ist eine Fallback-Option. Vielen Dank. – Yegor

2

Geben Sie einfach den Aufzählungswert als eine schmucklose Zeichenfolge an. Z.B. gegeben:

public enum Foo 
{ 
    Value1, 
    Value2 
} 

public class MainWindowVm 
{ 
    public string this[Foo foo] 
    { 
     get { return Enum.GetName(typeof(Foo), foo); } 
    } 
} 

wie so den ENUM-Wert angeben:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApplication1" 
     Title="MainWindow" Height="350" Width="525"> 

    <Window.DataContext> 
     <local:MainWindowVm/> 
    </Window.DataContext> 

    <Grid> 
     <TextBlock Text="{Binding Path=[Value1]}"/> 
    </Grid> 

</Window> 

x: Statische Markuperweiterung ist nicht erforderlich, da der XAML-Parser zur Unterstützung aufgebaut hat, dass die bereitgestellten Zeichenfolge mit den Werten unterstützt abbildet durch das Ziel enum.

+0

Perfekt funktioniert. Vielen Dank. – MoonStom