2013-04-25 22 views
8

まだWPFバインディングを学習しており、しばらくの間苦労しています。私はそうのようなのViewModel内の列挙型店舗を持っている:EnumがViewModelにあるときにEnum値をCommandParameterとして渡します。

namespace theNamespace 
{ 
    public class frmSetupViewModel 
    { 
     public enum LocationLabelType {Location, Sample} 
     ... 
    } 
} 

そして私はCommandParameterを経由して、ボタンのパス値のいずれかを持っていたいと思いますが、それは動作するように取得する方法を見つけ出すことはできません。これまでのところ、これらは私が試してみました組み合わせです:

//When value is inside the frmSetupViewModel, these do not work 
CommandParameter="{x:Static local:LocationLabelType.Location}" //'Type was not found.' 
CommandParameter="{x:Static local:frmSetupViewModel+LocationLabelType.Location}" //'Type was not found.' 
CommandParameter="{x:Static local:frmSetupViewModel.LocationLabelType.Location}" //'Type was not found.' 

CommandParameter="{Binding {x:Static local:LocationLabelType.Location}}" //'Value cannot be null' 
CommandParameter="{Binding {x:Static local:frmSetupViewModel+LocationLabelType.Location}}" //'Value cannot be null' 
CommandParameter="{Binding {x:Static local:frmSetupViewModel.LocationLabelType.Location}}" //'Value cannot be null' 

しかし、私はVM外の列挙型を移動して、このような名前空間にいる場合:

namespace theNamespace 
{ 
    public enum LocationLabelType {Location, Sample} 

    public class frmSetupViewModel 
    { 
     ... 
    } 
} 

これはうまく動作します:

//Works when enum is moved to Namespace 
CommandParameter="{x:Static local:LocationLabelType.Location}" 

私は私のCommandParameterに何か不足していると思いますか?

VMは、DataContextのを経由してロードされます

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

感謝を。

答えて

2

この作品の罰金:

CommandParameter="{x:Static uiTest:MainWindow+LocationLabelType.Location}" 

あなたは、このコードでプロジェクトを実行しましたか? プロジェクトをビルドしないと、WPFデザイナはこのエラー//'Type was not found.'を表示できます。なぜなら、プロジェクトには列挙型が表示されないからです。

+0

ありがとうございます、実際に動作します!では、Desginerのエラーを抑制する方法はありますか?さもなければ、私はその見解を見ることができなくなります。 – Ernie

+1

プロジェクトを構築しようとします。 –

+0

ありがとうございます。ダイスはありません。ビルド、クリーニング、再構築を試して、何もそれを得るようです。 /私がデザイナを使用したい場合は、名前空間でそれを使用しなければならないと思われます。これはVS2010ですが、VS2012はWPFの方が優れていますか? – Ernie