web-dev-qa-db-ja.com

MVVM:ListBox.SelectedItemにバインドしますか?

ビューモデルプロパティを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バインディングを修正するにはどうすればよいですか?ご協力いただきありがとうございます。

40
David Veeneman

まあ、それは人生と同じくらい大きいです。 XAMLで。ビューモデルプロパティ「Selectedtem」にバインドしています。残念ながら、実際の名前は「SelectedItem」です。そのため、このコードは実際に機能します。スペルミスに気づく前に、今日の午後早くに問題を解決してから、午後の残りの時間と夜中にWebを検索しました。

妻は今日の午後3時に私に言った、「ご存知のように、それは小さなものになるだろう」。そのため、「I」という文字が欠落していました。さて、少なくとも今は寝ることができます。

47
David Veeneman