2012-04-06 79 views
3

尽管{Binding Path=CollectionProperty[2]}工作正常,但我无法使用枚举工作,即{Binding Path=CollectionProperty[SomeEnum.Value2]}。如果可能的话,什么是适当的语法?谢谢。使用XAML中的枚举对索引集合属性

回答

1

好吧,我试着结合这样Dictionary<Foo, String>类型(其中Foo是一个枚举)的属性:

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

...但在运行时抛出一个异常的结合。

不过,奇怪的是,使用int作为索引器,即使对于在枚举上索引的属性似乎也行得通。这个:

{Binding Foos[2]} 

......工作得很好。所以如果你愿意在XAML中将枚举值表示为整数,那么你可以这样做。

否则我认为你最好的选择是通过一个值转换器将{x:Static my:Foo.Bar}作为转换器参数直接绑定到Foos

+0

是的,这就是我在说的。使用转换是一个后备选项。谢谢。 – Yegor 2012-04-06 10:12:46

2

只需将枚举值指定为未经修改的字符串即可。例如。给定:

public enum Foo 
{ 
    Value1, 
    Value2 
} 

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

指定枚举值,像这样:

<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:静态标记扩展不是必需的,因为XAML分析器具有内置的支持,将映射所提供的字符串所支持的值目标枚举。

+0

完美工作。谢谢。 – MoonStom 2016-02-20 06:23:30