3

虽然{Binding Path=CollectionProperty[2]}工作正常,但我无法使用枚举,即{Binding Path=CollectionProperty[SomeEnum.Value2]}. 如果可能的话,什么是合适的语法?谢谢。

4

2 回答 2

3

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

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:Static 标记扩展不是必需的,因为 XAML 解析器已内置支持,可将提供的字符串映射到目标枚举支持的值。

于 2013-09-17T12:46:28.673 回答
1

好吧,我尝试绑定到如下类型的属性(枚举Dictionary<Foo, String>在哪里):Foo

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

...但这在运行时引发了绑定异常。

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

{Binding Foos[2]}

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

否则,我认为您最好的选择是Foos通过值转换器直接绑定,{x:Static my:Foo.Bar}作为转换器参数传递。

于 2012-04-06T09:45:33.253 回答