2012-04-06 11 views

答えて

1

はまあ、私はこのような(Fooが列挙型である場合)タイプDictionary<Foo, String>のプロパティにバインドしようとした:

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

...それは、実行時にバインディング例外をスローしました。

奇妙なことですが、列挙型でインデックス付けされたプロパティであっても、intをインデクサとして使用することは奇妙なことです。これは:

{Binding Foos[2]} 

...うまくいきました。 XAMLで列挙型の値を整数として表現しようと思えば、そのようにすることができます。

それ以外の場合は、Foosに値コンバーターを直接バインドし、コンバータのパラメータとして{x:Static my:Foo.Bar}を渡すことをお勧めします。

+0

はい、これが私の話です。コンバージョンの使用はフォールバックのオプションです。ありがとうございました。 – Yegor

2

真っ暗な文字列として列挙型の値を指定するだけです。例えば。与えられた:

<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:

public enum Foo 
{ 
    Value1, 
    Value2 
} 

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

はそうのような列挙型の値を指定してXAMLパーサーがでサポートされている値に与えられた文字列をマップするサポートが組み込まれているため、静的なマークアップ拡張機能は必須ではありませんターゲットenum。

+0

完全に動作します。ありがとう。 – MoonStom

関連する問題