2009-09-05 9 views
40

ビューモデルプロパティをListBox.SelectedItemプロパティにバインドするにはどうすればよいですか?MVVM:ListBox.SelectedItemへのバインド?

シンプルなMVVMデモを作成してこれを理解しようとしました。私のビューモデルには、次のプロパティがあります。

private ObservableCollection<DisneyCharacter> p_DisneyCharacters; 
public ObservableCollection<DisneyCharacter> DisneyCharacters 
{ 
    get { return p_DisneyCharacters; } 

    set 
    { 
     p_DisneyCharacters = value; 
     base.FirePropertyChangedEvent("DisneyCharacters"); 
    } 
} 

private DisneyCharacter p_SelectedItem; 
public DisneyCharacter SelectedItem 
{ 
    get { return p_SelectedItem; } 

    set 
    { 
     p_SelectedItem = value; 
     base.FirePropertyChangedEvent("SelectedItem"); 
    } 
} 

リストボックスで選択した項目にSelectedItemプロパティをバインドします。ここでは、リストボックスのXAMLは次のとおりです。

<ListBox ItemTemplate="{StaticResource MasterTemplate}" 
     ItemsSource="{Binding Path=DisneyCharacters}" 
     SelectedItem="{Binding Path=Selectedtem, Mode=TwoWay}" 
     HorizontalAlignment="Stretch" /> 

ここに私の問題がある:私は、リストボックスの選択を変更するとビューモデルのSelectedItemプロパティが更新されていません。

私は一時的にビューモデルSelectedItemプロパティをSelectedIndexプロパティに置き換えたテストを行いました。これをListBox.SelectedIndexプロパティにバインドしました。そのプロパティはうまく更新されました - それは私が働くことができないSelectedItemプロパティです。

したがって、どのようにSelectedItemバインディングを修正できますか?ご協力いただきありがとうございます。

+4

MVVMのリストボックスの使い方の良い例です。ありがとう – MrPurpleStreak

答えて

45

さて、そこには人生として大きなものがあります。 XAMLで。私は、ビューモデルプロパティ "Selectedtem"にバインドしています。残念ながら、実際の名前は "SelectedItem"です。このコードは実際に動作します - 私はこの午後早い段階で問題を解決し、スペルミスに気づく前に、残りの部分を午後と夕方にウェブを精査しました。

私の妻は、今日の午後3時に、「あなたが知っているように、小さなものになるだろう」と私に語った。そしてそれはそうしました - 欠落した手紙 "私"。まあ、少なくとも私は今寝ることができます。

+50

これらの問題を早期に発見するために、アプリケーションをデバッグするとVisual Studioの出力ウィンドウに「Selectedtem」というプロパティが存在しないことを示すWPFバインディングエラーが表示されます。うまくいけば、この種のエラーをより早く追跡するのに役立ちます。 – Andy

+1

Silverlight開発を開始した1年前の出力ウィンドウのバインディングエラーについて知りたいと思っています。 – BoxerBucks

+0

@BoxerBucks、SilverLightで失敗したバインディングの**通知**またはログ**を取得したとは思いません。 – Sam

関連する問題