2012-04-06 4 views
3

{Binding Path=CollectionProperty[2]}이 제대로 작동하지만 열거 형 (예 : {Binding Path=CollectionProperty[SomeEnum.Value2]})으로 작업 할 수 없습니다. 가능하다면 무엇을위한 적절한 문법이 될까요? 감사.XAML에서 열거 형을 사용하여 색인 생성 속성 인덱싱

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

를하지만 그 런타임 바인딩 예외가 발생했습니다 :

답변

1

음,이 같은 (Foo는 ENUM이다) 형 Dictionary<Foo, String>의 속성에 바인딩 시도했다.

비록 열거 형으로 색인 된 속성이라도 int를 인덱서로 사용하는 것은 흥미로운 일입니다. 이것 :

{Binding Foos[2]} 

... 정상적으로 작동했습니다. 따라서 XAML에서 열거 형 값을 정수로 나타내려면 그렇게 할 수 있습니다.

그렇지 않으면 가장 좋은 방법은 변환기 매개 변수로 {x:Static my:Foo.Bar}을 전달하여 값 변환기를 통해 Foos에 직접 바인딩하는 것입니다.

+0

예, 그게 내가 말하고자하는 것입니다. 전환 사용은 대체 옵션입니다. 고맙습니다. – Yegor

2

그냥 열거되지 않은 문자열로 enum 값을 지정하십시오. 예 : 제공 :

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